2017-01-18 58 views
0

我需要知道我是否可以使用TFTP创建WCF服务以从设备获取数据。我知道我可以使用C#创建一个应用程序来做到这一点,但我试图使它成为一个基于Web的应用程序。此外,WCF需要托管在IIS上。我想使用WCF服务来启动连接,然后从设备中提取图像。当我运行我的代码时,似乎没有SendTo命令的问题,但它总是给我一个“System.Net.Sockets.SocketException(0x80004005):连接尝试失败,因为连接方在一段时间后没有正确响应的时间,或建立连接失败,因为连接的主机未能响应System.Net.Sockets.Socket ReceiveFrom(...)。这是因为我使用netTcpBinding?我可以使用基本的HTTP绑定?还是其他什么东西或者,也许它只是不能使用WCF来创建此服务,想法??我可以使用WCF从使用tftp(UDP)的设备获取数据吗?

服务代码段:

public byte[] ipTftpGet(String xferFileName) 
{... 
    byte[] rcvBuffer = new byte[5200]; 
    .... 

try 
{  
    ipEndPointFtp = new IPEndPoint(ipAddress, 69); 
    tftpS = new Socket(ipEndPointFtp.AddressFamily, SocketType.Dgram, ProtocolType.Udp); 
    remoteEP = ipEndPointFtp; 
    // Request and Receive first Data Packet From TFTP Server 
    tftpS.SendTo(sndBuffer, nameLen, System.Net.Sockets.SocketFlags.None, remoteEP); 
    tftpS.ReceiveTimeout = 1000; 

    try 
    {     
     len = tftpS.ReceiveFrom(rcvBuffer, ref remoteEP);//tftpS.ReceiveFrom(rcvBuffer, ref remoteEP); 
     rcvBuffer[len] = 0x00; 
    } 
    catch (System.Net.Sockets.SocketException ex) 
    { 
     xferValid = false; 
     errMsgStr = ex.ToString(); 
    } 
} 

的Web.config:

<services> 
    <service behaviorConfiguration="mexBehavior" 
      name="ComService.ComService"> 
    <endpoint address="ComService" binding="netTcpBinding" 
     contract="ComService.IComService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8090" /> 
     <add baseAddress="http://localhost:8080" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

回答

0

我能够确定问题。 TFTP使用UDP,显然你不能使用IIS来托管服务。您可以使用Windows控制台或Windows窗体应用程序托管服务。我创建了一个简单的控制台应用程序,然后更新我的web.config(现在的一个app.config)如下:

的Program.cs:

namespace TFTPConsoleHost 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (ServiceHost host = new ServiceHost(typeof(TFTPService.TFTPService))) 
      { 
       host.Open(); 
       Console.WriteLine("Host started @ " + DateTime.Now.ToString()); 
       Console.ReadLine(); 
      } 

     } 
    } 
} 

的App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/> 
    </startup> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <netTcpBinding> 
     <binding name="unsecured"> 
      <security mode="None"/> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service name="TFTPService.TFTPService"> 
     <endpoint address="soap.udp://localhost:8060/" binding="udpBinding" contract="TFTPService.ITFTPService"/> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8060/"/> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 
相关问题