我使用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>
答案 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();