Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
379 views
in Technique[技术] by (71.8m points)

.net - How to use socket based client with WCF (net.tcp) service?

I have developed a WCF service that uses the net.tcp adapter and listens to a specific port. I want to connect to that service using a normal .net client that uses sockets to send data to the port and listens to responses.
When I try to send data to this service, I get the error: "The existing connection was forcibly closed by remote host".
However, i am able to connect with the service by another client which uses the Address/Binding/Contracts of the WCF service.
Is there a way that enables me to communicate with a WCF service by using an ordinary socket based client?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The key decision is whether or not to make the WCF service conform to the socket client or whether to make the socket client conform to the WCF service.

It will be simplest to attempt to conform to the WCF service, rather than trying to implement something custom within WCF, which is never easy. At the bottom of the Other Resources section below you will see a link that describes the message inspection that is necessary in order to attempt to conform to a WCF service.

Having said that, .NET sockets do not natively communicate with WCF.

Any attempt to do so will require custom programming on the WCF side of things.

Whether you are using TcpClient or raw sockets in .NET to connect to and communicate with WCF does not matter. Any such interoperability must be handled with custom logic within WCF. Note that Net.Tcp is a custom transport protocol. It is not technically using TCP in the same way that the TcpClient is.

For example, UDP is very commonly used by socket servers in the Linux world. WCF does not provide a built-in UDP transport. However, there is a UDP sample for WCF that implements UDP for WCF. Unfortunately, that sample does not illustrate communicating to and from a non-WCF UPD socket server.

I have an outstanding question that is rather detailed where I explain my effort to get sample code to generically be testable for using UDP...

Is it possible to make the WcfTestClient work for custom transport channels?

Nobody has answered my question yet. So, if you succeed in making this work, I am very interested. My case was driven by a desire for the WCF Service to be able to call out to a UDP socket server running on Linux without having to clutter my service with non-WCF coding. I don't want to mix approaches.

Other Resources...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...