因此,我有一个负责管理其他服务的中央Web服务。这些服务在主WS中注册了他们的URL,从而导致他们自己的Web服务。
我现在需要做的是从中央Web服务调用子Web服务。我已经搜索了谷歌如何做到这一点,但我能找到的只有this。
我想注册任何网络服务,而不是像我找到的解决方案中所建议的那样创建网络参考。
如何在不使用网络参考的情况下完成这项工作?
答案 0 :(得分:0)
Alka的,
如果您使用的是Web服务(WCF除外),您可以在web.config中更改要访问的Web服务的URL,也可以通过代理上的URL在代码中更改此URL。
例如
var testuri = "http://a_web_server/PostCode1/PostCodeWebService.asmx";
proxy.Url = testuri;
您还可以创建自己的Web服务代理并从那里处理Web服务重定向。
答案 1 :(得分:0)
您可能在开发时添加Web引用(这将允许Visual Studio发现Web服务并具有可用的Intellisense)。
但是,在您的代码中,您可以动态创建对象。
假设您需要使用名为TestSoapClient的对象来访问您的Web服务。如果您想使用Web引用中的URL创建它,您只需执行
TestSoapClient testSoapClient = new TestSoapClient();
该代码将使用默认URL(即您添加Web引用时指向的URL)。
如果要使用在运行时指定的URL动态创建TestSoapClient对象,请使用以下内容:
XmlDictionaryReaderQuotas readerQuotas = new XmlDictionaryReaderQuotas();
readerQuotas.MaxDepth = 32;
readerQuotas.MaxStringContentLength = 8192;
readerQuotas.MaxArrayLength = 16384;
readerQuotas.MaxBytesPerRead = 4096;
readerQuotas.MaxNameTableCharCount = 16384;
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.Name = BindingName;
basicHttpBinding.CloseTimeout = new TimeSpan(0, 1, 0);
basicHttpBinding.OpenTimeout = new TimeSpan(0, 1, 0);
basicHttpBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
basicHttpBinding.SendTimeout = new TimeSpan(0, 1, 0);
basicHttpBinding.AllowCookies = false;
basicHttpBinding.BypassProxyOnLocal = false;
basicHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
basicHttpBinding.MaxBufferSize = 65536;
basicHttpBinding.MaxBufferPoolSize = 524288;
basicHttpBinding.MaxReceivedMessageSize = 65536;
basicHttpBinding.MessageEncoding = WSMessageEncoding.Text;
basicHttpBinding.TextEncoding = Encoding.UTF8;
basicHttpBinding.TransferMode = TransferMode.Buffered;
basicHttpBinding.UseDefaultWebProxy = true;
basicHttpBinding.ReaderQuotas = readerQuotas;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
EndpointAddress endpointAddress = new EndpointAddress("YourDynamicUrl");
TestSoapClient testSoapClient = new TestSoapClient(basicHttpBinding, endpointAddress);
这样,Web引用URL的值和配置文件中的值将不会在运行时使用。
答案 2 :(得分:0)
好的,问题解决了。
我的解决方案是使用Web引用并将代理URL更改为我想要的服务。这样我就可以动态访问我的Web服务。
感谢您的回答。