触发wcf服务发送xml文件的问题

时间:2014-08-27 17:46:47

标签: c# wcf nettcpbinding

我是wcf的新手,但是我试图使用net.tcp绑定wcf服务将xml文件传输到客户端。

我可以创建xml文件并尝试连接到我的wcf服务失败。

我按照本指南http://msdn.microsoft.com/en-us/library/ff647180.aspx创建了Windows测试应用,我正在使用网络项目。

我已将服务引用添加到项目中,以下是我尝试执行的代码:

public string SendXMLDocument(XmlDocument xDoc)
        {
var message = Message.CreateMessage(MessageVersion.Soap11, "Request_for_action", new XmlNodeReader(xDoc));

            var factory = new ChannelFactory<IActionServiceLibrary>("IMMS.ActionsServiceLibrary.IActionServiceLibrary");
            var channel = factory.CreateChannel();

            var response = channel.Request(message);
            channel.Close();

            return response.ToString(); //this should come back okay..

        }

我的库appconfig看起来像:

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

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <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>
    <client>
      <endpoint address="net.tcp://localhost:8080/ActionService/" binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding_IActionServiceLibrary" contract="IMMS.ActionsServiceLibrary.IActionServiceLibrary"
        name="IMMS.ActionsServiceLibrary.IActionServiceLibrary">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
    <services>
      <service name="IMMS.ActionsServiceLibrary.ActionServiceLibrary">
        <endpoint address="net.tcp://localhost:8080/ActionService/" binding="netTcpBinding" bindingConfiguration=""
          contract="IMMS.ActionsServiceLibrary.IActionServiceLibrary">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8080/ActionService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="Action_Service" sendTimeout="00:01:00" transactionFlow="false"
          listenBacklog="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" portSharingEnabled="false">
          <reliableSession enabled="false" />
          <security mode="None">
            <transport clientCredentialType="None" protectionLevel="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
        <binding name="NetTcpBinding_IActionServiceLibrary" />
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

服务的应用配置:

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

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <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>
    <client>
      <endpoint address="net.tcp://localhost:8080/ActionService/" binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding_IActionServiceLibrary" contract="IMMS.ActionsServiceLibrary.IActionServiceLibrary"
        name="IMMS.ActionsServiceLibrary.IActionServiceLibrary">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
    <services>
      <service name="IMMS.ActionsServiceLibrary.ActionServiceLibrary">
        <endpoint address="net.tcp://localhost:8080/ActionService/" binding="netTcpBinding" bindingConfiguration=""
          contract="IMMS.ActionsServiceLibrary.IActionServiceLibrary">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8080/ActionService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="Action_Service" sendTimeout="00:01:00" transactionFlow="false"
          listenBacklog="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" portSharingEnabled="false">
          <reliableSession enabled="false" />
          <security mode="None">
            <transport clientCredentialType="None" protectionLevel="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
        <binding name="NetTcpBinding_IActionServiceLibrary" />
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

我在频道创建时名称不匹配。

通过wcf传送xml文件的任何帮助都指向我正确的方向。

1 个答案:

答案 0 :(得分:0)

我发现我的配置文件在修复它现在运行的错误后搞砸了。