2017-01-18 9 views
0

TFTP를 사용하여 장치에서 데이터를 가져 오는 WCF 서비스를 만들 수 있는지 알아야합니다. 내가 할 C#을 사용하여 응용 프로그램을 만들 수 있지만 웹 기반 응용 프로그램을 만들려고하는 알으십시오. 또한 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 Forms 응용 프로그램을 사용하여 서비스를 호스팅 할 수 있습니다.

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> 
다음과 같이 나는 간단한 콘솔 응용 프로그램을 만든 후 내 Web.config의 (지금의 App.config를) 업데이트