web-dev-qa-db-ja.com

c#Soapクライアントの問題-契約でthの複数のエンドポイント構成が見つかりました

ここからSOAP APIをテストする単純なc#コンソールアプリケーションを作成しようとしています: https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl (または https://www.imailtest.co.uk/webservice/imail_api.asmx apiメソッドを表示)

そこで、このリファレンスを追加し、2つのAPIメソッド(AuthentiacateとProcessPrintReadyPDF)を呼び出して、このエラーを取得しようとしました:

エラー:契約のthに対する複数のエンドポイント構成が見つかったため、契約 'ServiceReference1.imail_ apiSoap'のエンドポイント構成セクションをロードできませんでした。優先エンドポイント構成セクションを名前で指定してください。

これが私のC#コードです。

static void Main(string[] args)
{
    // Anticipate Error
    try
    {
        // Generate SOAP Client
        ServiceReference1.imail_apiSoapClient soapClient = new ServiceReference1.imail_apiSoapClient();

        // Login
        Console.WriteLine("Authenticating");
        soapClient.Authenticate(iMailUser, iMailPass);

        // Proceed If PDF File Exists
        if (File.Exists(PDFFile))
        {
            // Upload PDF File To iMail
            Console.WriteLine("Uploading PDF File");
            soapClient.ProcessPrintReadyPDF(File.ReadAllBytes(PDFFile), "", true);

            // Test Complete
            Console.WriteLine("Done");
        }
        else
        {
            // Log Error
            Console.WriteLine("PDF File [{0}] Does Not Exists", PDFFile);
        }
    }
    catch (Exception ex)
    {
        // Log Error
        Console.WriteLine("Error : "+ ex.Message);
    }

    // End Test
    Console.WriteLine("Press any key to continue ...");
    Console.ReadKey();
}

これは、コンソールアプリにサービス参照を追加する方法です。

screenshot

何か案は?

50
Latheesan

このような契約名を定義することで問題が解決すると信じています(スクリーンショットに基づいて):

ServiceReference1.imail_apiSoapClient soapClient = 
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");

これで、エラーが発生しなくなり、APIが機能しているように見えます。

28
Latheesan

あなたのApp.configでは、このようなものを見ることができます

 <client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxx"
        contract="xxxxxxxxxx" name="xxxxxxxxxxxxx" />
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx"
        binding="customBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxx" name="xxxxxxxxxxxxx" />
  </client>

2番目のエンドポイントを削除すると、次のようになります。

<client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" />      
  </client>

ここでコードを実行し、コードが正常に動作することを願って

106

[解決!スクリーンショットの下のWebサービスのプロキシクラスaspにエンドポイントを追加するだけです

enter image description here

16
Ayaat Shifa

構成ファイルに両方のクライアント構成を保持する場合は、アプリケーション設定を作成するだけです。

したがって、App.configファイルには、必要なエンドポイントを指定できる次のエントリが含まれます。

<setting name="EndPoint" serializeAs="String">
    <value>imail_apiSoap</value>
</setting>

あなたのコードで使用できます:

ServiceReference1.imail_apiSoapClient soapClient =
    new ServiceReference1.imail_apiSoapClient(Properties.Settings.Default.EndPoint);
2
Larry