Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
WSA-Header eines Requests bei Zugriff auf SOAP-Service stimmt an manchen Stellen nicht
MysticEmpires
myCSharp.de - Member



Dabei seit:
Beiträge: 303

Themenstarter:

WSA-Header eines Requests bei Zugriff auf SOAP-Service stimmt an manchen Stellen nicht

beantworten | zitieren | melden

Hi,

ich versuche grade auf einen Webservice zuzugreifend er WS-Adressing erfodert. Ich habe die WSDL eingebunden und versuche mit einem simplen WSHttpBinding auf den Service zuzugreifen:

var binding = new WSHttpBinding(SecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

Mein genertierter Request sieht dann in etwa so aus:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
      <a:Action s:mustUnderstand="1"/>
      <a:MessageID>urn:uuid:85e88a4a-4569-4c90-b35c-e465c72f9925</a:MessageID>
      <a:ReplyTo>
        <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
      </a:ReplyTo>
      <a:To s:mustUnderstand="1">https://EndPointServer123/services</a:To>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <ProcessAliveTest xmlns="http://xmldefs......" />
  </s:Body>
</s:Envelope>

Jedoch hat der Server 2 Probleme mit dem Header des Requests.

- unter a:To steht aktuell der von mir definierte Endpoint. Der Server hätte hier aber gern einen Link aller "ws://..."
- a:Action wird leider nicht mit einem "http://xmldefs..." link gefüllt

Wie kann ich diese beiden Felder beeinflussen?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von MysticEmpires am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15517
Herkunft: BW

beantworten | zitieren | melden

Deine Adresse sollte eigentlich unter <wsa:From> stehen. Wohin es geht sollte <wsa:To> beschreiben.

<wsa:ReplyTo> sollte ebenfalls Deine Adresse sein, sofern Du die Antworten auf Deine Anfragen verarbeitest; nicht irgendein w3c-Pfad.

Vielleicht reagiert der Webservice falsch, weil Du ihm ein ungültiges ReplyTo gibst; oder die Gegenstelle ist suboptimal implementiert.
private Nachricht | Beiträge des Benutzers
MysticEmpires
myCSharp.de - Member



Dabei seit:
Beiträge: 303

Themenstarter:

beantworten | zitieren | melden

Die Frage ist wie kommt das a:ReplyTo den zustande? Es ist ja nicht so das ich das definiert hätte. Ich habe das ganze ja auch per SOAPUi getestet. ReplyTo wird vom Server garnicht erwartet. To,Action and MessageID sind die einzigen die er benötigt.

Mein Code ist sehr rudimentär:

var binding = new WSHttpBinding(SecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

var entpointAddr = new EndpointAddress("https://EndPoint123/services");

using (var client = new DocumentManagementServicePortTypeClient(binding, entpointAddr))
{
    client.ClientCredentials.UserName.UserName = "User123";
    client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "2342424234234");

    try
    {
        var result = client.ProcessAliveTest(new ProcessAliveTestType());
    }
    catch (Exception exc)
    {
        Console.WriteLine($"Error: {exc.Message}");
    }
}


Ich gehe jetzt mal davon aus das die Gegenstelle korrekt implementiert ist. Auf den WebService habe ich selbst leider keinen Einfluss und auch keine direkt Möglichkeit Details zuerfahren wie diesen implementiert ist.

*EDIT*

Ok Action habe ich gefunden. In der Refernce.cs steht folgendes:

[System.ServiceModel.OperationContractAttribute(Action= "", ReplyAction="*")]

Dort kann ich den Wert entsprechend meiner Wünsche anpassen. Wen jetzt noch das "to"-Feld geändert werden könnte. Wäre ich glücklich :)
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von MysticEmpires am .
private Nachricht | Beiträge des Benutzers