Frage

Ich versuche, eine dritte Partei Web-Service zu nutzen (so habe ich keinen Zugriff auf den Web-Service-Code). In Visual Studio 2008 habe ich ein neuen Website-Projekt (ASP und c #) und hinzugefügt, um den Web-Referenz (nicht Web-Service! So dass ich denke, es ist nicht ein WCF-Dienst ist ... richtig?).

Das Problem ist, dass aus der Dokumentation des Webdienstes Ich weiß, dass jede Seife Anfrage mit dem folgenden Umschlag und Header werden muss gesendet werden, können Sie mir bitte sagen, wie diese Anfragen in meinem Soap hinzufügen? Alle Lösungen, die ich erforderlich gefunden Modifizieren der Web-Service-Quelle oder einen Proxy, kann ich nicht tun, weil ich keinen Zugriff auf den Source-Web-Service haben und die Web-Service-Proxy in dem Client in Visual Studio 2008 kommt in einem Read-Only Tempakte!

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" soap:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Username>gimme.data@stats.com</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Ima5tatto</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body xmlns:ns2="http://neighbourhood.statistics.gov.uk/nde/v1-0/discoverystructs">
<ns2:AreaAtLevelElement>
<AreaIdWithLevelType>
<AreaId>276704</AreaId>
<LevelTypeId>12</LevelTypeId>
</AreaIdWithLevelType>
</ns2:AreaAtLevelElement>
</soap:Body>
</soap:Envelope>
War es hilfreich?

Lösung

Sie können statisch hinzufügen Header auf die Nachrichten in der Konfigurationsdatei mit dem Header Element im Endpunkt Elemente. Jedes Kind-Element des Header-Elements kopiert werden, wie in der Kopfzeile Ihrer Nachricht ist.

Andere Tipps

ich mit dem gleichen Problem bin zu kämpfen und so haben bis jetzt eine Nachricht rel="nofollow Inspektor der Lage sein, die SOAP-Header zu bekommen, obwohl ich nicht sicher bin, wie die wsse zu bekommen: Sicherheits Sachen drin, ohne es manuell zu tun. Ich möchte in der Lage sein, die WS-Security-Schema zu verwenden (sowie SAML-Schemas), um die wsse zu bauen: Sicherheit stuff ...

Für das, was es wert ist meine Botschaft Inspektor Code unten ist, wenn ich das löse ich es auf diesem Thread posten werden.

Hier ist, wo ich das Verhalten an den Client hinzufügen:

client.Endpoint.Behaviors.Add(new CustomBehavior());
msgOutput = client.ProvideAndRegisterDocumentSetXDR(msgInput);

Und hier ist die Botschaft, Inspektor und individuelles Verhalten:

public class CustomMessageInspector : System.ServiceModel.Dispatcher.IClientMessageInspector
{
    public void AfterReceiveReply(ref WCF.Message reply, object correclationState)
    {
    }

    public Object BeforeSendRequest(ref WCF.Message request, IClientChannel channel)
    {
        MessageHeaders headers = new MessageHeaders(MessageVersion.Soap11WSAddressing10);
        MessageHeader header = MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "");
        request.Headers.Add(header);
        return null;
    }
}


public class CustomBehavior : System.ServiceModel.Description.IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRunTime)
        {
            CustomMessageInspector inspector = new CustomMessageInspector();
            clientRunTime.MessageInspectors.Add(inspector);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
        }

        public void Validate(ServiceEndpoint endpoint)
        {
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top