2014-01-16 49 views
0

我在Visual Studio 2010中创建了一个WCF服务并将其发布到运行IIS 7.5的服务器上。需要什么网址才能使用WCF服务

它有一个方法 - 被称为returnNumber。这需要一个名为numberIn的int参数,将其乘以2并返回答案。

如果我把

http://myserver/TestService/Service1.svc?wsdl 

在浏览器中,它显示XHTML的网页。

我应该使用什么网址,以便我可以从浏览器调用我的WCF服务 - 在QueryString中传递一个数字,以便调用returnNumber方法?


而且下面的反应 - 丹尼尔 - 这里是我的代码:

web配置:

<?xml version="1.0"?> 
<configuration> 
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
</system.web> 
<system.serviceModel> 
<behaviors> 
<serviceBehaviors> 
<behavior> 
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
<serviceMetadata httpGetEnabled="true"/> 
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
<serviceDebug includeExceptionDetailInFaults="false"/> 
</behavior> 
</serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
</configuration> 

包含接口的IServicer1.cs文件:

namespace NumberTest 
{ 
    [ServiceContract] 
    public interface IService1 
    { 
    [OperationContract(IsOneWay = false)] 
    int returnNumber(int numberIn); 
    } 
} 

和Service1.svc.cs

namespace NumberTest 
{ 
    public class NumberService : IService1 
    { 
     public int returnNumber(int numberIn) 
     { 
     int returnValue = numberIn * 2; 
     return returnValue; 
    } 
} 

我已经发表了以上

http://myServer/TestService 

,如果我从VS Web应用程序中添加一个引用到WCF服务时,returnNumber方法公开,如果我把它的工作原理。

我该如何允许运行不是asp.net的网站的人(因此他们不能添加服务引用)能够调用我的returnNumber方法并获取数字?

+0

你或许应该考虑网页API的这种功能 – Alex

+0

当你说一个“网页API”你的意思是SOAP Web服务? –

+0

不,我的意思是ASP.net WebApi框架。 Google是你的朋友... – Alex

回答

0

要将参数传递给querystring上的服务,您很遗憾不使用正确的技术堆栈。

WCF通过SOAP 1.2(默认情况下)终结点公开Web操作,这意味着Web服务器期望针对服务URL的SOAP请求(即包装XML请求负载的SOAP信封)。

你想要做的是连接一个纯HTTP Web服务,为此正确的Microsoft技术堆栈是ASP.NET WebApi

+0

'...这意味着Web服务器期望针对服务URL的SOAP请求(即包装XML请求负载的SOAP信封)...' 谢谢。我需要告诉某人想从jsp网站调用我的WCF服务? –

+0

告诉他们使用服务元数据地址中的元数据(最后是使用?wsdl的服务地址)。此元数据包含有关在您的服务范围内暴露的操作和类型的信息,并且将使调用者能够构建服务“代理”,从而使他们能够调用服务方法,就好像它们在进程中一样。我不是Java开发人员,但我认为JabX会这样做。 –

+0

感谢您的帮助。我发现?wsdl文件充满了对tempuri.org的引用。这会是一个问题吗?我需要摆脱它们吗? –

0

您可以使用WCF测试客户端(取决于您使用的VS的版本),在您的WSDL的地址中弹出,并使用它来测试您的Web服务。

如果您使用测试客户端和Fiddler等工具,可以通过查找HTTP POSTs到您的Web服务来找到正在使用的URL。

+0

我正在使用VS 2010.您在哪里访问WCF测试客户端? 我是否已经完全掌握了棒的错误结局?我认为WCF服务应该能够(例如)将数据发送给其他人的服务器,并获得答案。如果它们不能通过在查询字符串中发送参数访问 - 这有什么意义? (除了其他Windows用户能够添加服务引用 - 但那些不使用Windows和构建asp.net应用程序的人呢?) –

+0

@MartinSmellworse查看C:\ Program Files文件(x86)\ Microsoft Visual Studio 11.0 \对于WcfTestClient.exe Common7 \ IDE(对于VS 2010,更改为Visual Studio 10.0)。 关于Web服务的目的,你没有得到错误的结局。你不能真正在浏览器中进行测试 - 你需要使用除最简单的Web服务之外的所有东西进行POST(我不能说你的期望是没有看到代码和配置的POST),所以WCF测试客户端非常适合测试是因为它能够证明这一点。 –

+1

@MartinSmellworse查看http://www.getpostman.com/ - 只要您能够轻松地构建请求,就可以用于测试Web服务。 –

0

关于你的第二个问题,从非asp.net平台上使用你的web服务,你应该只需要配置你的服务来提供WSDL。

非.NET平台(又名Java)具有诸如wsdl2java之类的工具,它们使用WSDL并生成必要的客户端代码。

工具和用法会根据平台而有所不同,但以下链接应提供有价值的参考。 http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html

问候,

相关问题