我写了一个WCF服务。我已成功浏览该服务,并说:
You have created a service.
然后我使用visual studio中的“添加服务引用”添加对它的引用。然后我编写以下代码来使用它....
ServiceReference1.VLSContentServiceClient client = new ServiceReference1.VLSContentServiceClient("VLSContentServiceEndpointBehaviour");
List<ServiceReference1.Category> cats = client.GetCategoriesByGET();
但是我得到了错误:
找不到端点元素 名称 'VLSContentServiceEndpointBehaviour' 和合同 'ServiceReference1.IVLSContentService' 在ServiceModel客户端中 配置部分。这可能是 因为没有配置文件 找到您的申请,或因为 没有匹配此名称的端点元素 可以在客户端元素中找到。
这没有任何意义,因为参数'endPointConfigurationName'与我在服务中设置的相匹配。这是服务配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="VLSContentServiceBehaviour" name="VLSContentService">
<endpoint address="" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="VLSContentServiceBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="VLSContentServiceEndpointBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
怎么回事?
答案 0 :(得分:5)
您正在使用 REST 服务 - 无法使用添加服务引用创建此类服务的客户端。这仅适用于SOAP服务(没有webHttpBinding和webHttp行为)。此外,一旦使用SOAP服务,就不会将任何服务器端功能的名称传递给代理的构造函数。代理构造函数需要客户端配置的客户端端点名称。
答案 1 :(得分:0)
看起来你的合同不正确。你有:
contract="IVLSContentService"/>
并期待:
contract="ServiceReference1.IVLSContentService"/>
根据错误消息。
您的端点地址也是空的。这不需要包含什么吗?
答案 2 :(得分:0)
创建客户端实例时的VLSContentServiceEndpointBehaviour参数是端点的名称,而不是端点行为。
更改
<endpoint address="" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>
到
<endpoint address="" name ="Client" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentService"/>
并创建一个服务客户端
ServiceReference1.VLSContentServiceClient client = new ServiceReference1.VLSContentServiceClient(“Client”);
你的地址也丢失了,有点奇怪。