2014-01-16 80 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

問候,

相關問題