1

ここには、WCF サービスを備えたレガシ コードがいくつかあります。

サービスは、生成されたProxy.csを介してクライアントによって呼び出されます

シンプルにすべきだと思い、svcutil.exe を使用して独自のプロキシを生成したかったのですが、何をしようとしているか (実行中の exe をダウンロードに使用する、アセンブリを使用する、webconfig を使用する) に応じて、さまざまなエラーが発生します。たとえば、svcutil は、サービスがメタデータを公開しない可能性があることを通知します (これは正しくないように思われます)。

webconfigには次のものがあります:

<serviceMetadata httpGetEnabled="true"/>

そして、マルチサイトバインディングがあります

このようなプロキシを生成するにはどうすればよいですか? コントラクトの一部を変更して、現在のバージョンのプロキシを生成したい。

現時点では、svcutil のように追加するときにエラーが発生するため、サービス参照はありません。

何か案は?

-編集- サービスは、msdn の WCF の例と非常によく似た、セルフホステッド サービスを通じて公開されます。複数のサービスのエンドポイントがあり、dll に実装されています。

-編集 2- これは、セルフ ホスティング サービスの app.config です。特殊性を低くするために、いくつかの名前を置き換えました。

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="PersonDataModelContainer" connectionString="metadata=res://*/PersonDataModel.csdl|res://*/PersonDataModel.ssdl|res://*/PersonDataModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=|DataDirectory|\PersonDatabase.sdf&quot;" providerName="System.Data.EntityClient"/>
  </connectionStrings>
  <system.serviceModel>
    <bindings>
      <netMsmqBinding>
        <binding name="TransactionalNoSecurity" durable="true" exactlyOnce="true" maxReceivedMessageSize="2147483647" maxRetryCycles="1" receiveRetryCount="20" retryCycleDelay="00:05:00">
          <security mode="None"></security>
        </binding>
      </netMsmqBinding>

      <basicHttpBinding>

        <binding name="TransportSecurity" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>

      <ws2007HttpBinding>

        <binding name="NoSecurity" transactionFlow="true" maxReceivedMessageSize="200000" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="None"></security>
        </binding>

        <binding name="UNMessageSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Message">
            <message clientCredentialType="UserName" establishSecurityContext="true"/>
          </security>
        </binding>

        <binding name="CertMessageSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Message">
            <message clientCredentialType="Certificate" establishSecurityContext="true"/>
          </security>
        </binding>

        <binding name="DomainMessageSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Message">
            <message clientCredentialType="Windows" establishSecurityContext="true"/>
          </security>
        </binding>

        <binding name="RM_NoSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <reliableSession enabled="true" ordered="false"/>
          <security mode="None"></security>
        </binding>
      </ws2007HttpBinding>

      <netTcpBinding>
        <binding name="NoSecurity" transactionFlow="true">
          <security mode="None"></security>
        </binding>


        <binding name="DomainMessageSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Message">
            <message clientCredentialType="Windows"/>
          </security>
        </binding>

        <binding name="CertMessageSecurity" transactionFlow="true" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <security mode="Message">
            <message clientCredentialType="Certificate"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>

    <behaviors>
      <serviceBehaviors>
        <behavior name="SimpleServiceBehavior">
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>

      <service name="MessagePlatform.LoggingService.GeneralLoggingService" behaviorConfiguration="SimpleServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/"/>
          </baseAddresses>
        </host>
        <endpoint address="Logging" binding="basicHttpBinding" name="LoggingService" contract="MessagePlatform.LoggingService.Contracts.ILoggingService"/>

      </service>
      <service name="MessagePlatform.GatewayService.GeneralGatewayService" behaviorConfiguration="SimpleServiceBehavior">
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:8000/"/>
            </baseAddresses>
          </host>
          <endpoint address="gateway" binding="basicHttpBinding" name="GatewayService" contract="MessagePlatform.GatewayService.Contracts.IGatewayService"/>
          <endpoint address="gateway" binding="basicHttpBinding" name="Db2GatewayService" contract="MessagePlatform.GatewayService.Contracts.IDb2GatewayService"/>
          <endpoint address="gateway" binding="basicHttpBinding" name="Db1GatewayService" contract="MessagePlatform.GatewayService.Contracts.IDb1GatewayService"/>

          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

      </service>

    </services>
    <client>
      <endpoint name="LoggingServiceEP" address="http://localhost/Logging" binding="basicHttpBinding" contract="MessagePlatform.LoggingService.ILoggingService">        
      </endpoint>

      <endpoint name="GatewayServiceEP" address="http://localhost/gateway" binding="basicHttpBinding" contract="MessagePlatform.GatewayService.IGatewayService">
      </endpoint>

      <endpoint name="GatewayServiceDb2" address="http://localhost/gateway" binding="basicHttpBinding" contract="MessagePlatform.GatewayService.IDb2GatewayService">
      </endpoint>

      <endpoint name="GatewayServiceDb1" address="http://localhost/gateway" binding="basicHttpBinding" contract="MessagePlatform.GatewayService.IDb1GatewayService">
      </endpoint>

    </client>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
  </startup>
</configuration>
4

1 に答える 1

2

新しいプロキシを作成できるように、Metadata Exchange Endpoint を有効にする必要もあります。

<service name="MessagePlatform.GatewayService.GeneralGatewayService" behaviorConfiguration="SimpleServiceBehavior">
  <host>
    <baseAddresses>
      <add baseAddress="http://localhost:8000/"/>
    </baseAddresses>
  </host>
  <endpoint address="gateway" binding="basicHttpBinding" name="GatewayService" contract="MessagePlatform.GatewayService.Contracts.IGatewayService"/>
  <endpoint address="gateway" binding="basicHttpBinding" name="Db2GatewayService" contract="MessagePlatform.GatewayService.Contracts.IDb2GatewayService"/>
  <endpoint address="gateway" binding="basicHttpBinding" name="Db1GatewayService" contract="MessagePlatform.GatewayService.Contracts.IDb1GatewayService"/>

  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

</service>

そして走る

svcutil http://localhost:8000/mex
于 2013-01-28T13:57:08.677 に答える