簡體   English   中英

我可以創建動態 web 服務客戶端引用而不將其引用添加到項目的服務引用中嗎?

[英]Can I create dynamic web service client reference without adding its reference to service references of the project?

我需要創建多個 web 服務的動態引用並發送一些價值。

要真正充滿活力,您必須做三件事:

1) 從 web 服務獲取服務描述 (wsdl) 2) 從服務描述動態生成代理代碼 3) 編譯代碼並將其公開在您的應用程序中 - 通常通過反射或某種動態腳本接口。

下面的代碼片段來自我很久以前做的一些實驗。 它不是生產代碼,不會編譯,但如果這是您想要 go 的方向,那么應該給您一個良好的開端。

它不包括步驟(3)。 生成的代碼可以使用 System.CodeDom.Compiler 命名空間中提供的類進行編譯。

Uri uri = new Uri(_Url + "?wsdl");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.AllowAutoRedirect = true;
request.PreAuthenticate = false;
if (_User.Length > 0)
{
    request.UseDefaultCredentials = false;
    request.Credentials = new NetworkCredential(_User, _Password, _Domain);
}
WebResponse response = null;

try
{
    response = request.GetResponse();
}
catch (System.Net.WebException wex)
{
    response = wex.Response;
}
catch (Exception ex)
{
}

Stream requestStream = response.GetResponseStream();
ServiceDescription sd = ServiceDescription.Read(requestStream);
_ReferenceName = _Namespace + "." + sd.Services[0].Name;
ServiceDescriptionImporter Importer = new ServiceDescriptionImporter();
Importer.AddServiceDescription(sd, string.Empty, string.Empty);
Importer.ProtocolName = "Soap12";
Importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

CodeNamespace nameSpace = new CodeNamespace(_Namespace);
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(nameSpace);

ServiceDescriptionImportWarnings warnings = Importer.Import(nameSpace, ccu);
if (warnings == 0)
{
    StringWriter sw = new StringWriter(System.Globalization.CultureInfo.CurrentCulture);
    Microsoft.CSharp.CSharpCodeProvider prov = new Microsoft.CSharp.CSharpCodeProvider();
    CodeGeneratorOptions options = new CodeGeneratorOptions();
    options.BlankLinesBetweenMembers = false;
    options.BracingStyle = "C";

    prov.GenerateCodeFromNamespace(nameSpace, sw, options);

    _ProxySource = sw.ToString();
    sw.Close();
}

我現在沒有代碼,但我知道這可以做到,事實上,在我工作過的一家前公司,我們確實有一個通用的 web 服務客戶端在內部開發。

在這里有一個鎖:

通用 Web 服務代理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM