1

我希望我的 ASP.NET 应用程序能够与任意数量的不同主机通信,所有主机都提供具有完全相同接口的 Web 服务,但在不同的域/ASMX URL 上。我在这里找到了一个解决方案,它允许我为一个 Web 服务生成一个类,但是 URL 地址/前缀/命名空间在方法属性中是硬编码的,我不知道如何更改它们(相关问题here)。还有其他解决方案吗?

4

1 回答 1

1

一种可能的解决方案是使用 DynWsib- HERE。请注意,这不适用于 WCF。

然后您可以在运行时调用。为每个 url 创建和缓存二进制文件。下面的函数是基本思想。根据需要进行更改。

public object InvokeWebserviceCall(string wsdUrl, string actionUrl, string functionName,
        string domain, string username, string password, params object[] parameters)
    {
        ///todo: validate input

        var proxy = new DynamicWebServiceProxy();

        //credentials if needed
        if (!string.IsNullOrEmpty(domain))
        {
            proxy.Credentials = new NetworkCredential(username, password, domain);
        }
        else if (!string.IsNullOrEmpty(username))
        {
            proxy.Credentials = new NetworkCredential(username, password);
        }

        proxy.EnableMessageAccess = true;
        proxy.Wsdl = wsdUrl;

        //get type name
        var type = proxy.ProxyAssembly.GetTypes().SingleOrDefault(t => t.BaseType == typeof(SoapHttpClientProtocolExtended));

        if (type != null)
        {
            proxy.TypeName = type.Name;
        }

        proxy.MethodName = functionName;
        proxy.Url = new Uri(actionUrl);

        if (parameters != null)
        {
            parameters.ToList().ForEach(proxy.AddParameter);
        }

        object result = proxy.InvokeCall();

        return result;
    }
于 2013-01-26T04:42:52.487 回答