0

データベースに対してクエリを実行し、VSTO Excel アドインによって消費されるデータを返す基本的な WCF サービスを展開しています。

サービスをローカルで実行してテストするとすべて正常に動作しますが、アドインが公開されたサービスを指すとすぐに、500 エラー "Bad Data" が表示されます (これが戻りの SOAP パケットに含まれているすべてです)。

公開側のコードはローカルと同じで、ローカル ブラウザからサービスを確認できます。公開側は、IIS7.0 を実行しているローカル ネットワーク上の別のマシンです。

クライアント構成:

      <binding name="zzzServiceBinding" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="10485760" maxBufferPoolSize="524288" maxReceivedMessageSize="10485760"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="TransportCredentialOnly">
              <transport clientCredentialType="Ntlm" proxyCredentialType="None"
                  realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
      </binding>

およびエンドポイントの定義:

  <endpoint address="http://_EDITED OUT_/zzz/zzzService.svc"
      binding="basicHttpBinding" bindingConfiguration="zzzServiceBinding"
      contract="zzzService.IzzzService" name="zzzService_Prod" />
  <endpoint address="http://localhost:51149/zzzService.svc"
      binding="basicHttpBinding" bindingConfiguration="zzzServiceBinding"
      contract="zzzService.IzzzService" name="zzzService_Local" />

編集: 失敗した方法の 1 つ -

    [FaultContract(typeof(Exception))]
    public DataTable GetBranchList(DateTime ReportDate)
    {
        try
        {
            return zzzLibrary.GetBranchList(ReportDate);
        }
        catch (Exception ex)
        {
            throw LogAndThrow(ex);
        }
    }


    protected FaultException LogAndThrow(Exception ex)
    {
        log.Error("Error in the zzz Service.", ex);
        return new FaultException(new FaultReason(ex.Message));
    }

図書館 -

    public static DataTable GetBranchList(DateTime ReportDate)
    {
        DbInstance db = GetDBConnection();

        try
        {
            string SQLText = "zzzschema.usp_zzzGetBranchList";
            return db.QueryReturningDataTable(SQLText, CommandType.StoredProcedure, db.CreateParameter("@ReportDate", ReportDate));
        }
        finally
        {
            db.Close();
        }
    }

単体テストでテストしているため、ライブラリルーチンが機能することを知っており、ローカルで実行されているサービスから呼び出されたときに機能します。

4

1 に答える 1