Как назвать веб-сервис без wsdl в .NET

Я не думаю так. Вы управляете, когда Располагают, назван, что означает, что Вы могли в теории писать код распоряжения, который делает предположения о (например), существовании других объектов. Вы не имеете никакого контроля, когда финализатор называют, таким образом, это было бы сомнительно, чтобы иметь финализатор, автоматически звонят, Располагают от Вашего имени.

<час>

РЕДАКТИРОВАНИЕ: Я ушел и протестировал, только для проверки:

class Program
{
    static void Main(string[] args)
    {
        Fred f = new Fred();
        f = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Console.WriteLine("Fred's gone, and he's not coming back...");
        Console.ReadLine();
    }
}

class Fred : IDisposable
{
    ~Fred()
    {
        Console.WriteLine("Being finalized");
    }

    void IDisposable.Dispose()
    {
        Console.WriteLine("Being Disposed");
    }
}
23
задан John Saunders 14 August 2009 в 16:09
поделиться

4 ответа

Что ж, наконец-то я заставил это работать, поэтому я напишу здесь код, который использую. (Помните, что .Net 2.0 и нет wsdl для получения из веб-службы.)

Сначала мы создаем HttpWebRequest:

public static HttpWebRequest CreateWebRequest(string url)
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Headers.Add("SOAP:Action");
    webRequest.ContentType = "text/xml;charset=\"utf-8\"";
    webRequest.Accept = "text/xml";
    webRequest.Method = "POST";
    return webRequest;
}

Затем мы вызываем веб-службу, передавая все необходимые значения. Когда я читаю мыльный конверт из XML-документа, я буду обрабатывать данные как StringDictionary. Это должен быть лучший способ сделать это, но я подумаю об этом позже:

public static XmlDocument ServiceCall(string url, int service, StringDictionary data)
{
    HttpWebRequest request = CreateWebRequest(url);

    XmlDocument soapEnvelopeXml = GetSoapXml(service, data);

    using (Stream stream = request.GetRequestStream())
    {
        soapEnvelopeXml.Save(stream);
    }

    IAsyncResult asyncResult = request.BeginGetResponse(null, null);

    asyncResult.AsyncWaitHandle.WaitOne();

    string soapResult;
    using (WebResponse webResponse = request.EndGetResponse(asyncResult))
    using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
    {
        soapResult = rd.ReadToEnd();
    }

    File.WriteAllText(HttpContext.Current.Server.MapPath("/servicios/" + DateTime.Now.Ticks.ToString() + "assor_r" + service.ToString() + ".xml"), soapResult);

    XmlDocument resp = new XmlDocument();

    resp.LoadXml(soapResult);

    return resp;
}

Итак, это все. Если кто-то подумает, что к ответу нужно добавить GetSoapXml, я запишу.

25
ответ дан 29 November 2019 в 01:41
поделиться

На мой взгляд, для веб-службы SOAP нет оправдания, чтобы не предоставлять WSDL. Он не должен динамически генерироваться службой; он не обязательно должен быть доступен через Интернет. Но там должен быть WSDL, даже если они должны отправить его вам на гибком диске флэш-накопителе!

Если у вас есть возможность пожаловаться поставщикам этого службы, то я призываю вас сделать это. Если у вас есть возможность дать отпор, сделайте это. В идеале смените поставщика услуг и скажите этим людям, что это потому, что они не предоставили WSDL. По крайней мере, выясните, почему они не считают это важным.

15
ответ дан 29 November 2019 в 01:41
поделиться

Хм, здесь сложно, но возможно, но я сделаю все возможное, чтобы объяснить его.

Что вам нужно сделать, так это

  1. Создать сериализуемые классы, соответствующие схемам объектов, с которыми вы имеете дело на сторонняя служба.
  2. Узнайте, используют ли они какие-либо SOAPAction в своих вызовах служб.
  3. Посмотрите, можете ли вы создать asmx, который имитирует их службу с точки зрения возможности обработки запросов и ответов (это будет полезно для тестирования вашего клиентское приложение, если его служба не работает)
  4. Затем вы можете создать прокси-сервер службы из своей фиктивной службы и изменить URL-адрес службы при вызове сторонней службы.
  5. Если что-то не работает в вашем клиенте,затем вы можете настроить фиктивную службу, заново сгенерировать прокси и попробовать еще раз.

Я постараюсь добавить больше, когда и когда я подумаю об этом, но этого должно быть достаточно, чтобы вы начали.

3
ответ дан 29 November 2019 в 01:41
поделиться

Если вам повезет, вы все равно сможете получить wsdl. Некоторые структуры веб-сервисов позволяют вам получать динамически сгенерированный WSDL.

Веб-сервисы, написанные с помощью Axis1.x, позволяют вам получать динамически сгенерированный файл WSDL, просматривая URL-адрес.

Просто перейдите к

http://server/service.soap/?wsdl

Я не знаю ' Не знаю, возможно ли это с другими фреймворками.

3
ответ дан 29 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: