Для тех, кто проходит мимо, вот решение:
Объект SoapMessage не содержит никакой информации о моем клиенте.Однако я могу привести этот объект к объекту SoapClientMessage, и тогда у меня будет доступ к моему веб-сервису.Если я теперь добавлю метод к этому веб-сервису (создав новый публичный частичный класс), я смогу получить доступ к его свойствам и методам, как это (просто пример!):
private String ExtractFromStream(Stream target)
{
if (target != null)
return (new StreamReader(target)).ReadToEnd();
return "";
}
public void WriteOutput(SoapMessage message)
{
newStream.Position = 0;
string soapOutput = ExtractFromStream(newStream);
SoapClientMessage soapClient = (SoapClientMessage)message;
WebServiceClass webservice = (WebServiceClass)soapClient.Client;
webservice.MyMethod(soapOutput); //Use your own method here!
newStream.Position = 0;
Copy(newStream, oldStream);
}
public void WriteInput(SoapMessage message)
{
Copy(oldStream, newStream);
newStream.Position = 0;
string soapInput= ExtractFromStream(newStream);
SoapClientMessage soapClient = (SoapClientMessage)message;
WebServiceClass webservice = (WebServiceClass)soapClient.Client;
webservice.MyMethod(soapInput);
newStream.Position = 0;
}
Вы можете добавить методы (например,MyMethod в этом примере) для вашего WebServiceClass, создав новый публичный частичный класс и добавив в него методы, свойства и все, что вам нравится.