0

Excel を WCF サービスに接続しようとしていますが、些細なケースでさえ機能しないようです... Excel でプロキシを作成しようとすると、無効な構文エラーが発生します。Visual Studio デバッガーを Excel にアタッチしましたが、実際のエラーは "インターフェイスが見つかりません" です。ビジュアルスタジオによって作成されたテストクライアントは問題ないので、サービスが機能することはわかっています...問題はVBAモニカ文字列にあります。

次の2つのうちの1つを見つけたいと思っています。

1) この作業を行うモニカ文字列の修正、または

2) 動作するホストとクライアントの両方のソースを含む、ダウンロードする既存のサンプル プロジェクト。

私のVBAクライアントのコードは次のとおりです。

Dim addr As String
addr = "service:mexAddress=net.tcp://localhost:7891/Test/WcfService1/Service1/mex, "
addr = addr + "address=net.tcp://localhost:7891/Test/WcfService1/Service1/, "
addr = addr + "contract=IService1, contractNamespace=http://tempuri.org, "
addr = addr + "binding=NetTcpBinding_IService1, bindingNamespace=""http://tempuri.org"""

MsgBox (addr)

Dim service1 As Object
Set service1 = GetObject(addr)

MsgBox service1.Test(12)

次のサービスがあります。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(int value);
}

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

次の構成ファイルがあります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="WcfService1.Service1Behavior"
        name="WcfService1.Service1">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          contract="WcfService1.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:7891/Test/WcfService1/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService1.Service1Behavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

編集:

私のために働いた更新されたモニカは次のとおりです

Dim addr As String
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"", "
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"", "
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/"", "
addr = addr + "binding=""NetTcpBinding_IService1"", bindingNamespace=""http://tempuri.org/"""
4

2 に答える 2

0

クライアントを .NET オブジェクトとして作成し、それを COM オブジェクトとして登録し、VBA から COM 経由でアクセスします。

更新: この記事を見つけました: http://msdn.microsoft.com/en-us/library/ms752245.aspx

モニカーを使用するには、クライアントを生成し、それを COM に登録してから、その GUID を使用しているタイプではなく、タイプとして使用する必要があるようです。

于 2010-06-03T19:11:59.747 に答える
0

モニカー文字列のいくつかの重要な場所にいくつかの引用符を追加することで、これを修正することができました...残念ながら、デバッガーを Excel に接続すると、有用なフィードバックが得られないため、修正は推測と確認の課題です。VBA では、モニカー内の各文字列を二重引用符 ("") で囲む必要があります。さらに、契約書では小文字でアドレスを指定しましたが、mex アドレスの「mex」という用語は大文字にする必要があります。図に行きます。

于 2010-06-07T18:57:32.873 に答える