Как разобрать сообщение soap + xml, которое передается в мою службу wcf? - PullRequest
2 голосов
/ 20 мая 2011

У меня есть следующий запрос на мыло, который я получаю от клиента, где в основном я должен извлечь имя и затем отправить обратно «Hello Test»

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"   
xmlns:ns1="http://tempuri.org/">
<SOAP-ENV:Body>
    <ns1:Customer>
    <ns1:Name>Test</ns1:Name>
    </ns1:Customer>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Если у меня есть класс Customer, определите это так:

public class Customer
{
    public string Name {get;set;}
}

Я не уверен, как передать запрос мыла в мою операцию службы wcf, которая будет принимать объект запроса клиента, сгенерированный из xsd?

После того, как моя служба wcf получила запрос на мыло, я не уверен, как извлечь из него атрибут Name и отправить ответ клиенту, например, «Hello Test»

Примечание. Клиент не собирается отправлять объект Customer, он отправляет запрос xml, и я должен проанализировать его в объекте Customer. Надеюсь, это прояснит ситуацию.

Должен ли я сделать что-то вроде этого, когда я передаю XDocument моей операции службы wcf:

private static void ParsSoapDocument(XDocument soapDocument)
{
   //Parse XDocument for elements/attributes

}

1 Ответ

3 голосов
/ 20 мая 2011

Вам не нужно ничего анализировать, это то, что WCF обрабатывает для вас.

Могут существовать различия в зависимости от того, используете ли вы завернутые / развернутые сообщения, но базовый сценарий для описываемого вами мыльного сообщения, получаемого от клиента, будет иметь следующий интерфейс службы (если ваш ответ string ):

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    public string Customer(string Name);
}

Скорее всего, вы на самом деле пытаетесь выполнить операцию, которая требует клиента. Например, чтобы проверить, существует ли клиент, у вас может быть:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    public bool CheckCustomerExists(Customer Customer);
}

и ваш Customer класс на стороне службы должен быть определен как DataContract:

[DataContract]
public class Customer
{
    public string Name{get;set;}
}

Это заставит запрос на мыло выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> <SOAP-ENV:Body>
    <ns1:CheckCustomerExists>
    <ns1:Customer>
    <ns1:Name>Test</ns1:Name>
    </ns1:Customer>
    </ns1:CheckCustomerExists> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...