使用URL调用Web服务方法

时间:2010-06-18 12:49:45

标签: web-services

因此,我有一个负责管理其他服务的中央Web服务。这些服务在主WS中注册了他们的URL,从而导致他们自己的Web服务。

我现在需要做的是从中央Web服务调用子Web服务。我已经搜索了谷歌如何做到这一点,但我能找到的只有this

我想注册任何网络服务,而不是像我找到的解决方案中所建议的那样创建网络参考。

如何在不使用网络参考的情况下完成这项工作?

3 个答案:

答案 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服务。

感谢您的回答。