如何使WCF服务侦听特定端口并接收HTTP请求

时间:2014-03-31 12:25:34

标签: c# java wcf httprequest

我有Java应用程序将HTTP请求发送到特定端口。这段代码是这样的:

        URL url = new URL("http://localhost:8080/");
        HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
        httpCon.setDoOutput(true);
        httpCon.setRequestMethod("POST");
        OutputStreamWriter out = new OutputStreamWriter(
        httpCon.getOutputStream());
        System.out.println(httpCon.getResponseCode());
        System.out.println(httpCon.getResponseMessage());
        out.close();

现在,我想创建一个侦听特定端口的WCF服务,并接收从我的Java应用程序发送的HTTP POST请求。这是可能的,这是什么指导方针。我是WCF的新手,我已经通过了几个WCF示例,但我需要更多和我的问题更相关的东西。那么,我应该使用什么绑定,行为,......?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

当然可以让WCF和Java一起运行。您可能希望在C#中编写WCF部分并通过.NET实现,但Java方面非常简单。

有很多示例代码可供选择以实现这一点,但这里有一个由三部分组成的系列我用来获得Java-WCF项目。还包括来自CodeProject的另一个示例。

http://geekswithblogs.net/ballhaus/archive/2009/12/28/net-wcf-and-java-ws-interoperability-part1.aspx

http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

你必须根据项目的要求弄清楚绑定和行为的东西。有几种绑定风格,包括HTTP,TCP和其他。行为也各不相同。

这是一个很好的单一信息来源,用于比较不同的绑定类型以及每个提供的功能和兼容性。

http://msdn.microsoft.com/en-us/library/ms730879.aspx

答案 1 :(得分:1)

考虑到你刚开始使用WCF,我建议你最初在WCF中使用basicHttpBinding,然后在学习和发现WCF技巧时微调绑定。典型的basicHttpBinding看起来像

<basicHttpBinding>
        <binding name="basicClientBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:02:00"   hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None"></security>
        </binding>

</basicHttpBinding> 
如果WCF使用多个绑定甚至是wsHttpBinding,那么使用Axis在Java中创建WCF代理可能会很痛苦。你会发现许多帖子,如下面的那些,讨论使用复杂行为的复杂性或来自Java的wsHttpBinding

How to create java client using AXis 1.4 for consuming WCF service using wsHttpBinding

您没有使用Axis或其他任何东西来创建代理,因此对您来说非常棘手。我建议您在使用basicHttpBinding并且没有行为的vanilla WCF服务时开始使用。

同时编写C#服务时,请避免使用不兼容的.Net类型,如SecureString。 SecureString是密码的推荐类型。但Java世界中没有等效的映射类型