簡體   English   中英

WCF與visual studio 2012

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM