我已经创建了一个WCF服务,现在我想从引用中调用它,但为什么会出现InvalidOperationException?

时间:2011-06-08 11:21:44

标签: c# wcf web-services

我写了一个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>

怎么回事?

3 个答案:

答案 0 :(得分:5)

您正在使用 REST 服务 - 无法使用添加服务引用创建此类服务的客户端。这仅适用于SOAP服务(没有webHttpBinding和webHttp行为)。此外,一旦使用SOAP服务,就不会将任何服务器端功能的名称传递给代理的构造函数。代理构造函数需要客户端配置的客户端端点名称。

How to consume REST service

答案 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”);

你的地址也丢失了,有点奇怪。