はじめてのWCFです。
ホントはRestとNamedPipeをやりたかったけど、IIS7.0がいるって事らしいのであきらめました。
なんで、SoapとRestの共通化(?)する方法。
まず、適当なWcfサービスを作って、「System.ServiceMode.Web」を参照設定する。
InterfaceにUsing System.ServiceMode.Web; なんて書いてGetMessageなんてメソッドを作る。
この時、Attributeに「WebGet」をつける。
- [WebGet(UriTemplate = "GetMessage/{key}/")]
- [OperationContract]
- string GetMessage(string key);
[WebGet(UriTemplate = "GetMessage/{key}/")]
[OperationContract]
string GetMessage(string key);
実処理も適当に実装。
- public string GetMessage(string key)
- {
- return "IService1.GetMessage + " + key;
- }
public string GetMessage(string key)
{
return "IService1.GetMessage + " + key;
}
以上で、Wcfサービスのコーディングは完了。
後はWeb.Configの設定。
system.serviceModelの中を色々と変更。
まず、behaviorsを書く。
- <behaviors>
- <servicebehaviors>
- <behavior name="WcfService1.Service1Behavior">
- <servicemetadata httpgetenabled="true">
- </servicemetadata></behavior>
- </servicebehaviors>
- <endpointbehaviors>
- <behavior name="WcfService1.Service1Behavior">
- </behavior>
- <behavior name="WcfService1.Service1RestBehavior">
- <webhttp>
- </webhttp></behavior>
- </endpointbehaviors>
- </behaviors>
次にservices.serviceにendPointを書く。
- <services>
- <service behaviorconfiguration="WcfService1.Service1Behavior" name="WcfService1.Service1">
- <endpoint address="Soap" behaviorconfiguration="WcfService1.Service1Behavior" binding="basicHttpBinding" name="SoapEP" contract="WcfService1.IService1">
- <endpoint address="Rest" behaviorconfiguration="WcfService1.Service1RestBehavior" binding="webHttpBinding" name="RestEP" contract="WcfService1.IService1">
- <endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="IMetadataExchange">
- </endpoint></endpoint></endpoint></service>
- </services>
addressのあたりをユニークに設定するとうまくいくらしい。
で、これを使うWebサイトを作って、Web参照すると普通にSoapで使える。
ブラウザから「http://localhost:8080/Service1.svc/Rest/GetMessage/TestMessage/」なんて打てば、
「
IService1.GetMessage + TestMessage」
こんなレスポンスがもらえると。