0

https 接続を介して公開された Web サービスを使用する必要があります。このサービスは、証明書 (.pfx) とパスワードを提供したクライアントによって管理されているため、このサービスで操作を呼び出す必要がありますが、試してみると問題が発生します。それ。

クライアントとサービス間の SSL 接続を適切に作成していない可能性があります。web.config と、サービスを呼び出すコードの一部を示します。

web.config:

  <configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="credentialConfiguration">
          <clientCredentials>
            <clientCertificate 
                      findValue="10 14 08 f4 00 00 00 00 0f 3f"
                      storeLocation="CurrentUser"
                      x509FindType="FindBySerialNumber"/>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="myBinding">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://aaaaaaaaaaaaaaaaaa:700/aaa/aa/"
                behaviorConfiguration="credentialConfiguration"
                binding="wsHttpBinding"
                bindingConfiguration="myBinding"
                contract="mydll.service"
                name="faturasSOAP" />
    </client>
  </system.serviceModel>
</configuration>

サービスを呼び出すコード:

    //Create authentication header 
        CdoHeaderCredentials header = GetEncryptedCredentials();

        //Client Proxy 
        InvoiceService.faturasClient clientProxy = new faturasClient();

        //Custom header 
         AddWseSecurityHeaderEndpointBehavior customEndpointBehavior =
            new AddWseSecurityHeaderEndpointBehavior(header.Username, header.Password, header.Nonce, header.ClientDate);
                clientProxy.Endpoint.Behaviors.Add(customEndpointBehavior);

         //get document to register on service
         RegisterInvoiceType documentToSnyc = manager.DocumentToSnyc();

         //Load private certificate with key
         X509Certificate2 cert = new X509Certificate2(
          certPath,
            _certKey,
            X509KeyStorageFlags.Exportable);

         //Link the certificate with the proxy
         clientProxy.ClientCredentials.ClientCertificate.Certificate = cert;

            //invoke operation
        RegisterInvoiceResponse response =  clientProxy.RegisterInvoice(new RegisterInvoiceRequest(documentToSnyc));

サービスを呼び出すたびに、応答は同じです:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
  <s:Header xmlns:s="http://www.w3.org/2003/05/soap-envelope" />
  <env:Body>
    <env:Fault>
      <env:Code>
        <env:Value>
env:Receiver</env:Value>
      </env:Code>
      <env:Reason>
        <env:Text xml:lang="en-US">
Internal Error (from server)
</env:Text>
      </env:Reason>
    </env:Fault>
  </env:Body>
</env:Envelope>

私の質問は、このエラーがクライアント認証スロー ssl に関するものなのか、それとも何か他のものなのかということです。

前もって感謝します

4

1 に答える 1

0

サーバーについて何も知らずにエラーが表示されている理由を判断するには、ここに十分な情報がありませんが、エラー テキストに「Internal Error (from server)」と表示されているので、あなたのこととは何の関係もないと思います。クライアント側でやっています。いずれにせよ、このようなものが表示されたら、Web サービスの所有者に連絡して助けを求める必要があります。それが「内部エラー」である場合、それをデバッグするか、実際にどのようなエラーが発生したかを伝える責任があります。この「内部エラー」が表す側。

于 2012-12-17T16:24:02.267 に答える