[英]Visual Studio 2012 + IIS 8.0 = how to deploy WCF service on localhost?
[英]WCF with visual studio 2012
我是新的WCF編程,我從以下鏈接開始遵循一系列入門教程
http://msdn.microsoft.com/en-us/library/ms734712.aspx
我在控制台應用程序中托管服務,但當我嘗試創建客戶端並嘗試添加服務引用時,我得到以下異常。
下載'http:localhost:8000 / GettingStarted / mex / _vti_bin / ListData.svc / $ metadata'時出錯。 請求失敗,HTTP狀態為405:Method Not Allowed。 元數據包含無法解析的引用:'http:localhost:8000 / GettingStarted / mex'。 在http:localhost:8000 / GettingStarted / mex中沒有可以接受該消息的端點。 這通常是由錯誤的地址或SOAP操作引起的。 有關更多詳細信息,請參閱InnerException(如果存在)。 遠程服務器返回錯誤:(404)Not Found。 如果在當前解決方案中定義了服務,請嘗試構建解決方案並再次添加服務引用。
托管應用程序的代碼
class Program
{
static void Main(string[] args)
{
// Step 1 Create a URI to serve as the base address.
Uri baseAddress =
new Uri("http://localhost:8000/GettingStarted/");
// Step 2 Create a ServiceHost instance
ServiceHost selfHost =
new ServiceHost(typeof(CalculatorService), baseAddress);
try
{
// Step 3 Add a service endpoint.
selfHost.AddServiceEndpoint(typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
// Step 4 Enable metadata exchange.
var smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
// Step 5 Start the service.
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown.
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("exception: {0}", ce.Message);
selfHost.Abort();
}
}
}
現在我無法弄清問題是什么。 我正在使用visual studio 2012和.net平台4.5。
我也有類似的問題,弄亂了這個。 是的,您似乎已經正確地遵循了教程,但是如果您想要連接到它並作為服務使用(如制作服務引用),您還必須添加MEX服務。 在selfhost.Description.Behaviors.Add(smb)之后添加此行:
selfhost.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"http://localhost:8000/GettingStarted/mex");
這應該使您能夠通過“添加服務參考”進行連接。 此外,我發現根據您的系統,您可能需要以管理員身份運行VS以允許連接到網絡(如果您過去不小心告訴它)。
從錯誤消息判斷,似乎沒有服務偵聽指定的端口。 當您嘗試向其添加服務引用時,您需要擁有運行該服務的控制台應用程序。
顯然,該服務未運行,這意味着沒有端點偵聽您用於創建服務引用的URL。
您可以在IIS中托管服務,或者將控制台應用程序保持為上面提到的Damir。
當您嘗試訪問它時,請確保您的服務器正在運行。 還要檢查服務器上的配置,確保客戶端的端點與服務器的端點匹配。 確保你正在使用相同的綁定,而你正在使用它。 確保服務器正在偵聽並且服務器的防火牆沒有阻止您。 如果您對WCF服務進行了更改,請不要忘記為您的客戶端應用程序重新生成服務引用。
您確定已定義MEX端點嗎? 這是提供有關您的服務的元數據信息的內容,因此工作室可以生成客戶端代理。
在你鏈接到的教程中,就是這一點 :
// Step 4 Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
如果您在IIS中托管Web服務,請檢入web.config(在行為部分下)
httpsGetEnabled設置為True
我今天遇到了類似的問題。 但是,對我來說,我不需要顯式添加端點,正如@iMortalitySX已經說過的那樣。
我有一個不同的失敗原因:我綁定到http://0.0.0.0 ,認為聽IP無關緊要。 事實上,通過了SoapUI 我能夠連接並使用該服務。 但是當嘗試在另一個Visual Studio項目中發現服務時,發現將失敗,因為VS將獲得初始響應,但隨后跟蹤包含http://0.0.0.0的鏈接然后失敗。
所以將http://0.0.0.0更改為我的機器的正確IP修復了我的問題。
嘗試將uri地址放在瀏覽器中。 在我的情況下,我能夠看到ExceptionDetail。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.