WCF REST服務客戶端調用我有一個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();
}
我得到錯誤:
"There was no endpoint listening at
http://localhost:52602/TestService.svc/GetSomeNumber
that could accept the message."
我懷疑,由於某種原因,使用GetSomeNumber方法我的電話是不是正確映射到uri/getnumber。爲什麼?我該如何解決這個問題,我錯過了什麼?
但這不是我想要實現的。你提出的建議改變了方法本身的名稱 - 當它與courese的uri相同時,它將起作用。但它並不總是這樣,我想知道如果不是這樣,該怎麼辦。 – agnieszka
請參閱上面的編輯,這是您請求的映射缺失。 – SliverNinja
你是否絕對確信?我今天看到一篇關於cpnsuming twitter休息服務的文章,他們同時使用了webchannel factory和沒有匹配合約名稱和uri(http://blogs.msdn.com/b/kaevans/archive/2008/07/26/creating -a休息,Twitter的客戶端與 - wcf.aspx)。你能否提供你所說的內容? – agnieszka