Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вызвать web service? 
V
    Опции темы
Bogdan1024
  Дата 2.10.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Есть url сервиса и xml с параметрами, которые необходимо ему скормить. Как его вызвать не добавляя ссылку на сервис в проект?


--------------------
user posted image
PM MAIL   Вверх
Mymik
Дата 2.10.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Код

Uri uri = new Uri("http://....");
WebRequest webRequest = WebRequest.Create(uri);
System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();

// Get a WSDL
ServiceDescription sd = ServiceDescription.Read(requestStream);
string sdName = sd.Services[0].Name;

// Initialize a service description servImport
ServiceDescriptionImporter servImport = new ServiceDescriptionImporter();
servImport.AddServiceDescription(sd, String.Empty, String.Empty);
servImport.ProtocolName = "Soap";
servImport.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

CodeNamespace nameSpace = new CodeNamespace();
CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
codeCompileUnit.Namespaces.Add(nameSpace);

// Set Warnings

ServiceDescriptionImportWarnings warnings = servImport.Import(nameSpace, codeCompileUnit);

if (warnings == 0)
{
    StringWriter stringWriter = 
         new StringWriter(System.Globalization.CultureInfo.CurrentCulture);

    Microsoft.CSharp.CSharpCodeProvider prov = 
      new Microsoft.CSharp.CSharpCodeProvider();

    prov.GenerateCodeFromNamespace(nameSpace, 
       stringWriter, 
       new CodeGeneratorOptions());

    string[] assemblyReferences = 
       new string[2] { "System.Web.Services.dll", "System.Xml.dll" };

    CompilerParameters param = new CompilerParameters(assemblyReferences);

    param.GenerateExecutable    = false;
    param.GenerateInMemory      = true;
    param.TreatWarningsAsErrors = false;

    param.WarningLevel = 4;

    CompilerResults results = new CompilerResults(new TempFileCollection());
    results = prov.CompileAssemblyFromDom(param, codeCompileUnit);
    Assembly assembly = results.CompiledAssembly;
    service = assembly.GetType(sdName);

    methodInfo = service.GetMethods();
}



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Bogdan1024
  Дата 2.10.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



А если нет WSDL?
В вбскрипте это выглядит так:
Код

Set xmlHTTP = CreateObject("Microsoft.XMLHTTP")
xmlHTTP.open "POST", URLPath, False
xmlHTTP.send(strxml) 'xml с параметрами
strXMLOut = xmlHTTP.responseText 'ответ

Как это на C# написать?


--------------------
user posted image
PM MAIL   Вверх
Bogdan1024
Дата 2.10.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Нужно юзать какой-то XML-HTTP-POST protocol. Шо это и как мне не совсем понятно.


--------------------
user posted image
PM MAIL   Вверх
Bogdan1024
  Дата 3.10.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Сделал так:
Код

            Uri uri = new Uri(@"http://83.244.137.79/ServiceSearch.asp");            
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.Method = "POST";
            request.ContentType = "text/xml";            
            System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Documents and Settings\bve\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\XMLFile1.xml");
            string s = sr.ReadToEnd();
            sr.Close();
            System.Console.WriteLine("+Sending request.+");
            System.Console.WriteLine(s);
            System.IO.StreamWriter sw = new System.IO.StreamWriter(request.GetRequestStream());            
            sw.Write(s);                   
            sw.Close();
            System.Console.WriteLine("+Waiting for response.+");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            sr = new System.IO.StreamReader(response.GetResponseStream());
            System.Console.WriteLine(sr.ReadToEnd());
            sr.Close();
            System.Console.WriteLine("+End of response.+");
            System.Console.ReadKey(false);

Сервис возвращает ошибку "bad xml", хотя если этот же xml отправлять другим способом через тестовую страничку, то всё хорошо. Мне кажется проблема в кодировке. Как её указать можно?


--------------------
user posted image
PM MAIL   Вверх
Bogdan1024
Дата 6.10.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Разобрался: сделал как в последнем посту, только я случайно не на тот сервис данные слал  smile 


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.