Вопрос по wcf, soap – Проблема в использовании службы WCF (basicHttpBinding) в Delphi Win32 Client

3

Я пытаюсь сделать клиент Delphi (Delphi 2006) для связи со службой, написанной с использованием WCF. Сервис чертовски прост с одной функцией. Технически, как показано ниже:

[ServiceContract (Namespace = "http://www.company.com/sample/")]
public interface IService
{
    [OperationContract]
    string GetNumber (string name);
}

Я разместил этот сервис на IIS и показал его с помощью basicHttpBinding с конечной точкой mex. Я могу использовать его в клиентах .NET.

Я попытался запустить WSDLImp.exe, и он сгенерировал модуль исходного кода (кстати, он генерирует странные классы для инкапсуляции строкового типа. Почему он не может совпадать с строковым типом Delphi?). Когда я пытаюсь позвонить в эту службу, я получаю исключение:

The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).

Я не вижу способа настроить клиент Delphi Win32 на изменение параметров привязки или безопасности. Как я могу решить эту проблему?

Ваш Ответ

2   ответа
3

ть WSDL, предоставляемый WCF. Одним из решений является добавление оболочки ASMX к вашей службе и ее использование с клиентами Delphi.

Вот пример:

[ServiceContract (Namespace = "http://www.company.com/sample/")]
public interface IService
{
    [OperationContract]
    string GetNumber (string name);
}

public class Service : IService
{
    public string GetNumber (string name)
    {
        return Repository.GetNumber(name);
    }
}

[WebService(
    Namespace = "http://www.company.com/sample/",
    Name = "wstest",
    Description = "description")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class AsmxService : WebService
{
    [WebMethod]
    public string GetNumber(string name)
    {
        return Repository.GetNumber(name);
    }
}
@ Джон, я бы тоже не прыгнул в Дельфы. Но, как вы можете видеть, все еще есть люди, использующие его (включая меня), и мы должны найти решения, чтобы интегрировать его с более новой технологией (WCF). Я предложил ASMX, потому что это то, что я испытал сам и показал себя довольно неплохо в производстве.
Я больше не буду переходить на ASMX:johnwsaundersiii.spaces.live.com/blog/….
«Добавить оболочку ASMX» Я имею в виду, что вы можете добавить в свое решение веб-службу ASMX, которая использует те же методы, что и служба WCF, и эти методы выполняют те же самые задачи. Как только вы добавите этот веб-сервис asmx, вы получите конечную точку .asmx, которая может использоваться клиентами Delphi.
Извините, но я не понимаю, что именно вы подразумеваете под "добавить оболочку ASMX". Пожалуйста, вы можете уточнить? Hemant
Я попробовал то, что предложил Дарин, и, действительно, Delphi, похоже, довольно хорошо интегрируется с сервисом asmx. Это было довольно гладко. Hemant
2

чтобы увидеть, что происходит. Либо включите трассировку WCF для службы, возможно, включая трассировку сообщений. Вы должны быть в состоянии увидеть, что происходит, очень подробно.

Это ответ и мнение! +1

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