myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » WSA-Header eines Requests bei Zugriff auf SOAP-Service stimmt an manchen Stellen nicht
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
MysticEmpires
myCSharp.de-Mitglied

Dabei seit: 21.06.2004
Beiträge: 302


MysticEmpires ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
var binding = new WSHttpBinding(SecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

Mein genertierter Request sieht dann in etwa so aus:

XML-Code:
<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 15.08.2016 09:42.

15.08.2016 09:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.315
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
15.08.2016 10:27 Beiträge des Benutzers | zu Buddylist hinzufügen
MysticEmpires
myCSharp.de-Mitglied

Dabei seit: 21.06.2004
Beiträge: 302

Themenstarter Thema begonnen von MysticEmpires

MysticEmpires ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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:

C#-Code:
[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 15.08.2016 16:11.

15.08.2016 10:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Jahre.
Der letzte Beitrag ist älter als 4 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 05.12.2020 23:04