1

クライアントは、.net asmx Web サービスへの場所を提供してくれました。Web サービスと通信するために Web アプリケーションで使用するライブラリを作成しました。

ライブラリで、asmx への Web 参照を作成しました。

これは、サービスを呼び出すための私のコードです

using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);

    using (Stream xmlStream = xmlUtil.GenerateStreamFromString(
        wsProxy.GetData(index)))
    {
        //
    }
}

public Stream GenerateStreamFromString(String inputString)
{
    byte[] bytes = UTF8Encoding.UTF8.GetBytes(inputString);
    MemoryStream strm = new MemoryStream();
    strm.Write(bytes, 0, bytes.Length);
    return strm;
}

クライアントは、サービスをテストするためのテスト アプリを開発し、それが機能します。ただし、システムにデプロイされたアプリケーションは失敗します。クライアントがネットワークの外部にサービスを公開していないため、コードをステップ実行できません。これは、xml ファイルと wsdl のみを介してサンプル出力を提供することによって開発されました。

例外の詳細:

at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)     
at System.Net.HttpWebRequest.GetRequestStream()     
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(
   String methodName, Object[] parameters)     

サービスへの Web 参照と呼び出しを行うクラス ライブラリの App.config。クラス ライブラリは Web アプリで使用されます

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="clientService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <system.serviceModel>
        <bindings />
        <client />
    </system.serviceModel>
    <applicationSettings>
        <clientService.Properties.Settings>
            <setting name="clientService_client_client" serializeAs="String">
                <value>http://localhost:2362/client.asmx</value>
            </setting>
        </clientService.Properties.Settings>
    </applicationSettings>
</configuration>

解決済み: 元のコードを から変更した後、これは機能しました

using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);
}

using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);
    wsProxy.URL = [correct asmx location read from config file]
    //not sure why it would not automatically pick up from config file. 
}
4

2 に答える 2

1

プロキシが外部アドレスに到達する際に問題が発生している可能性があり、このようなものを構成に追加する必要がある場合があります。

  <system.net>
    <defaultProxy>
      <proxy
          autoDetect = "true" />
    </defaultProxy>
  </system.net>

よろしく

于 2011-03-04T13:15:40.573 に答える
0

私の最善の推測(限られた例外情報に基づく):

Webサービスをサーバーにデプロイするときに、Webサービスへの接続に使用する場所を更新する必要があります。

場所は通常、web.configまたはapp.config内のURI/URLです。

于 2011-03-04T12:47:58.247 に答える