次のような非常に単純なWCF RESTサービスがあります。
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke(
Method = "GET",
UriTemplate = "getNumber")]
int GetSomeNumber();
}
public class TestService : TestServiceApp.ITestService
{
public int GetSomeNumber()
{
return 5;
}
}
次のように構成されています。
<services>
<service name="TestServiceApp.TestService">
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="restBehaviour" contract="TestServiceApp.ITestService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="restBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
指定された Uri テンプレートを使用してブラウザーから呼び出されても問題なく動作します。
http://localhost:52602/TestService.svc/getnumber.
クライアントを次のように構成しました。
<client>
<endpoint name="TstSvc" address="http://localhost:52602/TestService.svc" binding="webHttpBinding" contract="TstSvc.ITestService" behaviorConfiguration="restBehaviour"/>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="restBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
次のコードでサービスを呼び出している場合:
using (WebChannelFactory<ITestService> factory = new WebChannelFactory<ITestService>("TstSvc"))
{
var svc = factory.CreateChannel();
svc.GetSomeNumber();
}
エラーが発生します:
http://localhost:52602/TestService.svc/GetSomeNumber
「メッセージを受け入れることができるリッスンしているエンドポイントがありませんでし た。」
何らかの理由で、GetSomeNumber メソッドを使用した呼び出しが uri /getnumber に正しくマップされていないと思われます。なんで?これを修正するにはどうすればよいですか、何が欠けていましたか?