1

サービスでホストされているWcfサービスと、tcpに接続するmvcクライアントがあります。サービスを更新するまではすべて正常に機能していましたが、クライアント側で参照を更新できません。

これはサービス契約です

[ServiceContract(Name = "Rules", Namespace = "http://api.xxx.com/2013/10/Rules")]
    public interface IRuleContractV1
    {
        [OperationContract(Name="GetRules")]
        PagedData<RuleDTO> GetRules();

        [OperationContract(Name="GetRulePaths")]
        PagedData<Rule_PathDTO> GetRulePaths(int ruleId);
    }

2 番目の操作コントラクト GetRulePaths は、参照の更新が機能しなくなったときに追加したものです。PagedData を削除してリストを返すだけで動作します。PagedData クラスをコピーしてその名前を変更すると、GetRules は PagedData<> と GetRulePaths PagingData<> を返します。(PagedData は、アイテムの総数とデータを列挙可能として保持する単純なクラスです)。

サービス参照を更新しようとすると、次のエラーが表示されます: URI プレフィックスが認識されません。メタデータに解決できない参照が含まれています: 'net.tcp://localhost:8002/SSAPI/mex'。メタデータに解決できない参照が含まれています: 'net.tcp://localhost:8002/SSAPI/mex'。

ここに AppConfig wcf 構成があります

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
...
<services>
<service name="SSService.Wcf.AdminService">
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="tcpMexBinding"
          name="mexAdminApi" contract="IMetadataExchange" />
        <endpoint address="Rules" binding="netTcpBinding" bindingConfiguration="tcpSecureBinding"
          contract="SS.Wcf.Admin.Contracts.IRuleContractV1" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8002/SSAPI" />
            <add baseAddress="http://localhost:8003/SSAPI" />
          </baseAddresses>
        </host>
      </service>
    </services>
...
<bindings>
<netTcpBinding>
        <binding name="tcpSecureBinding">
          <security mode="Transport">
            <message algorithmSuite="Basic256Sha256Rsa15" />
          </security>
        </binding>
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="tcpMexBinding" />
      </mexTcpBinding>
    </bindings>

理由はわかりましたが、なぜこれが起こるのかわかりません。次のような PagedData クラスです。

[System.Runtime.Serialization.DataContract(Name = "PagedData", Namespace = "http://api.xxx.com/2013/10/types")]
    public class PagedData<T> where T : class
    {
        /// <summary>
        /// Container with the actual data that is paged.
        /// </summary>
        [System.Runtime.Serialization.DataMember(Name = "Data")]
        public List<T> Data { get; set; }

        /// <summary>
        /// Total number of items. 
        /// </summary>
        [System.Runtime.Serialization.DataMember(Name = "TotalItems")]
        public long TotalItems { get; set; }
    }

データメンバー Data の注釈を削除すると、参照が更新されます。

4

1 に答える 1