这是一个问题,但不是它看起来的问题。
您实际上并不需要在使用您的代码的所有项目中的服务引用 - 您所需要的只是 app.config 中的一些信息。具体来说,绑定和端点地址。您可以将它们硬编码到您的代码中,然后您应该能够很好地引用它。
最简单的情况:
var request = new MyServiceRequest { /* set properties here */ };
var client = MyServiceReferenceClient(new BasicHttpBinding(), new EndpointAddress(@"https://my.service.com/path/to/service"));
var channel = client.ChannelFactory.CreateChannel();
var result = channel.MyService(request);
您需要在 上设置一些参数BasicHttpBinding
以匹配 app.config 文件中的内容,并且 URL 也来自那里。
请参阅此答案以了解为什么默认情况下它不起作用。
编辑:对于您的代码,您只需替换new Account_SSPSoapClient();
为以下内容:
new Account_SSPSoapClient(new BasicHttpBinding(), new EndpointAddress(@"https://my.service.com/path/to/service"));
其他一切都应该相同,但它将使用这些值而不是 app.config 值(这是它在没有参数的情况下所做的)。
在 app.config 文件中查找类似内容:
<bindings>
<basicHttpBinding>
<binding name="LabelRecoveryBinding" 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>
其中的所有内容都对应于您可以BasicHttpBinding
在上面创建的对象上设置的属性 - 其中大部分是默认值,但您可能希望手动设置所有内容以确保安全。
同样,寻找
<client>
<endpoint address="http://153.2.133.60:48010/xoltws_ship/LBRecovery"
binding="basicHttpBinding" bindingConfiguration="LabelRecoveryBinding"
contract="UPSLabelRecoveryService.LabelRecoveryPortType" name="LabelRecoveryPort" />
</client>
这会告诉您要提供给new EndpointAddress
.