使用soap客户端时出现InvalidOperationException

时间:2010-03-23 09:53:34

标签: c# .net wcf web-services soap

我使用vs2008中的add servece参考对话框添加了wsdl文件。

MyService serviceproxy = new MyService();

当我实例化服务代理时,我得到一个带有以下文本的InvalidOperationException(翻译自德语):

  

无法找到默认端点   合同要素   中的“ServiceName.ServiceInterface”   服务模式是指客户   配置部分。这可能是   因为:应用程序配置   找不到文件或不是端点   在客户端元素项中找到,   这对应于这份合同。

其中servicename是我在vs2008中添加服务的名称,ServiceInterface是为其自动生成的接口。

EDIT 这是我的app.config中的内容:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyServiceBinding" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
    </system.serviceModel>

3 个答案:

答案 0 :(得分:2)

您的配置中需要这样的内容:

<client>
  <endpoint binding="basicHttpBinding" 
    bindingConfiguration="MyServiceBinding" contract="ServiceName.ServiceInterface"
    name="MyServiceEndpoint">
  </endpoint>
</client>
标签内的

我刚读了你的评论。

所以从端点配置中删除了地址。

您可以选择在代码中完全指定端点,或者只选择以下地址:

MyServiceClient proxy = new MyServiceClient();
proxy.Endpoint.Address = new EndpointAddress ("http://addressto your service"); //<-- address

答案 1 :(得分:1)

检查配置文件 - 如果您在ASP.NET Web应用程序或网站中,请检查web.config,如果是Winforms或控制台应用程序,请检查app.config。

你的WCF服务应该有一些配置 - 低于<system.serviceModel>的任何东西都可以。如果没有 - 将必要的信息添加到您的配置中!

好的,所以如果你想在代码中指定你的端点URL,你需要在实例化你的客户端代理类时这样做 - 否则,它将在config中查找。使用此代码段,您将使用app.config中的http绑定配置设置,并在代码中单独指定URL:

BasicHttpBinding binding = new BasicHttpBinding("MyServiceBinding");
EndpointAddress address = new EndpointAddress(new Uri("http://localhost:8888/YourService"));

MyService serviceproxy = new MyService(binding, address);

这样,basicHttpBinding对象将使用name=MyServiceBinding从绑定下的配置中读取设置。

答案 2 :(得分:1)

编辑: 对不起,我的第一个回答是错误的。对于您需要的客户:

ChannelFactory<Interface> factory = new ChannelFactory< YourServiceInterface >(new basicHttpBinding(), new EndpointAddress(new Uri("http://localhost:8888/YourService")));
YourServiceInterface proxy = factory.CreateChannel();