Получить WCF для распознавания входящего SOAP-запроса - PullRequest
3 голосов
/ 03 октября 2010

Я пытаюсь написать приложение на C # для получения уведомлений eBay, которые отправляются как SOAP через HTTP. Я получаю уведомления в порядке, но не могу передать их в службу WCF. Что мне нужно сделать в конфигурации службы WCF, чтобы разрешить распознавание входящего запроса SOAP? Я использую webHttpBinding с сервисом WCF.

SOAP-запрос:

POST /paypal/ebaynotification.svc HTTP/1.0
Host: myserver.com
Content-Type: text/xml;charset=utf-8
SOAPAction: "http://developer.ebay.com/notification/ItemListed"
Content-Length: 6610
X-Original-Client: 10.71.29.83
Via: 1.0 sjcproxy10b:8081 (squid)
Cache-Control: max-age=86400
Connection: keep-alive

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header>
  <ebl:RequesterCredentials soapenv:mustUnderstand="0" xmlns:ns="urn:ebay:apis:eBLBaseComponents" xmlns:ebl="urn:ebay:apis:eBLBaseComponents">
   <ebl:NotificationSignature xmlns:ebl="urn:ebay:apis:eBLBaseComponents">RnvpyFAXc9Duo0W+/Mk68g==</ebl:NotificationSignature>
  </ebl:RequesterCredentials>
 </soapenv:Header>
 <soapenv:Body>
      ....
     </soapenv:Body>
   </soapenv:Envelope>

Мой интерфейс службы WCF:

[ServiceContract(Namespace="http://developer.ebay.com/notification")]
public interface Iebaynotification
{
    [OperationContract]
    void ItemListed(ItemType item);
}

Ответы [ 2 ]

2 голосов
/ 03 октября 2010

Вам нужно что-то, чтобы «перехватить» этот входящий SOAP-запрос и раскрутить класс WCF, чтобы обработать его.

У вас может быть собственная служба WCF (например, внутри службы Windows NT), которая прослушиваетзаданный URL-адрес конечной точки или у вас может быть активация на основе сообщений, например IIS / WAS, которая будет перехватывать входящее сообщение и передавать его в WCF для обработки.

Таким образом, в принципе, вам необходимо реализовать этот контракт на обслуживание вкласс службы WCF, а затем вам нужно разместить / развернуть эту службу WCF таким образом, чтобы входящее сообщение было им обработано.

Но самое главное: , поскольку это сообщение SOAP, вы не можете использовать webHttpBinding, который является привязкой, используемой для служб REST WCF.Вам нужно будет использовать что-то вроде basicHttpBinding или wsHttpBinding.

0 голосов
/ 03 октября 2010

Если eBay предоставляет конечную точку SOAP, я предполагаю, что они опубликовали документ WSDL, описывающий службу обратного вызова. Вы можете использовать инструмент командной строки svcutil.exe, чтобы сгенерировать правильный интерфейс контракта (ов) WCF / C #, который вам нужно реализовать в реализации сервиса для обработки описываемого вами сообщения SOAP. См. Документацию API eBay ...

...