Получите веб-методы динамически для службы asmx - PullRequest
0 голосов
/ 12 марта 2011

У нас есть ряд услуг asmx. Я хочу дать пользователю страницу с текстовым полем для ввода URL службы, например http://abc.win.com/myservice/customerdata.asmx. Когда пользователь нажимает кнопку «Загрузить», динамически я добавляю все веб-методы в раскрывающийся список. Мне нужны некоторые указатели: 1. Как динамически получить все методы? 2. Как я могу получить SOAP-запрос для выбранного метода? Таким образом, мы можем заменить значения параметров фактическими значениями?

Ценю вашу помощь.

Ответы [ 2 ]

1 голос
/ 17 апреля 2012
System.Net.WebClient client = new System.Net.WebClient();
System.IO.Stream stream = client.OpenRead("http://www.webservicex.net/globalweather.asmx?wsdl");          
ServiceDescription description = ServiceDescription.Read(stream);  

ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap12";  
importer.AddServiceDescription(description, null, null);  
importer.Style = ServiceDescriptionImportStyle.Client;     
importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;

CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace);

ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
if (warning == 0)
{              
    CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");   

    string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };
    CompilerParameters parms = new CompilerParameters(assemblyReferences);
    CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

    object[] args = new object[1];
    args[0] = "India";          

    object wsvcClass = results.CompiledAssembly.CreateInstance("GlobalWeather");
    MethodInfo mi = wsvcClass.GetType().GetMethod("GetCitiesByCountry");

    RegExpForCountryCity(mi.Invoke(wsvcClass, args).ToString());
}
else
{                
    Console.WriteLine("Warning: " + warning);
}


void RegExpForCountryCity(string strHTML)
{
    Regex qariRegex = new Regex(@"<Table>\s*<Country>(?<Country>[\s\S]*?)</Country>\s*<City>(?<City>[\s\S]*?)</City>\s*</Table>", RegexOptions.IgnoreCase | RegexOptions.Multiline);

    MatchCollection mc = qariRegex.Matches(strHTML);

    string strCountryCity = "";

    for (int i = 0; i < mc.Count; i++)
    {
        if (string.IsNullOrEmpty(strCountryCity))
            strCountryCity = "Country: " + "<b>" + mc[i].Groups["Country"].Value + "</b>" + " " + "City: " + "<b>" + mc[i].Groups["City"].Value + "</b>" + "</br>";
        else
            strCountryCity += "</br>" + "Country: " + "<b>" + mc[i].Groups["Country"].Value + "</b>" + " " + "City: " + "<b>" + mc[i].Groups["City"].Value + "</b>" + "</br>";
    }
    Response.Write(strCountryCity);
}
1 голос
/ 23 ноября 2011

Kuul13: вам нужно изменить URL вашего веб-сервиса, например http://abc.win.com/myservice/customerdata.asmx?wsdl, когда пользователь нажимает кнопку загрузки.затем вы можете использовать наш класс "ServiceDescription", чтобы получить описание wsdl, а затем повторить его, чтобы получить имена методов в классе 'WebMethodInfoCollection'.

Чтобы получить запрос SOAP, вам нужно использовать класс SOAPExtension. Это даст вам запрос SOAP.и ответ XML. Ссылка на эту ссылку для этого: http://blog.encoresystems.net/articles/how-to-capture-soap-envelopes-when-consuming-a-web-service.aspx?www.microsoft.com

Для динамического вызова веб-службы см. эту статью V.Good http://www.codeproject.com/KB/webservices/webservice_.aspx

Пожалуйста, ответьте мне на любой комментарий.

...