В c #, как я могу установить правильное пространство имен WS-адресации мыла для моего клиентского приложения от: ... до wsa: - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу создать мыльный клиент для существующего веб-сервиса. C # должно облегчить это, подумал я. Моему веб-сервису нужна ws-адресация с пространством имен wsa: ... , но c # отправляет a: .. в сервис.

Я выяснил все настройки "пользовательских привязок", например " Soap12WSAddressing10 ", но он все равно отправляет его с a: ... пространство имен

Что я могу сделать, чтобы это исправить? Пожалуйста, помогите мне!

Заранее спасибо!

app.config Конфигурация клиента

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="myBinding">
          <textMessageEncoding messageVersion="Soap12WSAddressing10" />
          <httpsTransport manualAddressing="false" requireClientCertificate="true"/>
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="https://blablabla.xyz"
        binding="customBinding"
        bindingConfiguration="myBinding" behaviorConfiguration="endpointCredentialsBehavior"
        contract="dmsMock.rightContract" >
        <headers>
        </headers>
      </endpoint>
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointCredentialsBehavior">
          <clientCredentials>
            <clientCertificate findValue="Systemuser"
               storeLocation="CurrentUser" storeName="My"
              x509FindType="FindBySubjectName" />
            <serviceCertificate>
              <authentication certificateValidationMode="PeerTrust"/>
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

From1.cs отправить запрос

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.ServiceModel.Security;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SUI_Mockclient
{
 public partial class Form1 : Form
 {
    private void button1_Click(object sender, EventArgs e)
    {
        dmsMock.Client client = new dmsMock.Client();
        dmsMock.ProcessAliveTestType ProcessATT = new dmsMock.ProcessAliveTestType();
        client.ProcessAliveTest(ProcessATT);
    }
 }
}

Запрос с неправильным пространством имен a: ws-addressing

POST https://ws-gateway HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Host: xyz
Content-Length: 849
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<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:fbd3e030-dd89-4369-af65-aa9c56d518bf</a:MessageID>
        <a:ReplyTo>
            <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
        </a:ReplyTo>
        <VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPo0gfhkGQrUeNhcACQAA</VsDebuggerCausalityData>
        <a:To s:mustUnderstand="1">https://ws-gateway</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.xyz"/>
    </s:Body>
</s:Envelope>
...