2010-02-09 186 views
3

因爲我考慮到使用WCF我認爲這將是最好的,只是遵循一個簡單的教程,讓我的腳溼。WCF異常:InvalidOperationException異常是未處理

3個小時後,我只有一個例外,以示對。它不會消失。

我排除了未被加載的app.config。 如果我將配置中的wsHttpBinding更改爲JHGHJGH,它會在運行時發生錯誤。 但是,當我更改合同界面的名稱,沒有給出錯誤(除了我在過去3小時所面對的同一個)

有沒有人有一個想法如何調試? 這種黑匣子錯誤的東西對我來說是非常令人厭惡的。

完全例外:

服務 'WCFtest.TestService' 具有零 應用程序(非基礎設施) 端點。這可能是因爲沒有 配置文件中找到了適合自己 的應用程序,或者是因爲沒有服務 元件匹配的服務名稱 可以在配置 文件中找到,或者因爲沒有終點的服務元素定義

(難道你不愛這些錯誤這表明任何的16分可能是錯的可能的事情)

我的Program.cs

ServiceHost host; 
Type serviceType = typeof(TestService); 
host = new ServiceHost(serviceType); 
host.Open(); //<---- exception is thrown here 
Console.ReadLine(); 

我的測試 'WCF服務'

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 

namespace WCFtest 
{ 
    [ServiceContract] 
    public interface ITest 
    { 
     [OperationContract] 
     double Add(double n1, double n2); 
     [OperationContract] 
     double Subtract(double n1, double n2); 
     [OperationContract] 
     double Multiply(double n1, double n2); 
     [OperationContract] 
     double Divide(double n1, double n2); 
    } 

    public class TestService : ITest 
    { 
     public double Add(double n1, double n2) 
     { 
      double result = n1 + n2; 
      return result; 
     } 
     etc... some methods are removed for brevity 
    } 
} 

我的app.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="WCFtest.testservice" 
       behaviorConfiguration="testservicebehaviour"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/test"/> 
      </baseAddresses> 
     </host> 
     <endpoint address="" 
       binding="wsHttpBinding" 
       contract="WCFtest.ITest" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="testservicebehaviour"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

回答

1

在App.config元素的「name」屬性是區分大小寫的。

而是 「WCFTest.testservice」,你需要指定 「WCFtest.TestService」 像這樣:

<service name="WCFtest.TestService" behaviorConfiguration="testservicebehaviour"> 
+0

良好的漁獲物。我以爲servicename實際上是你給它的任何名字。但是你說它必須與實現該服務的類匹配。謝謝!令人驚訝的是,人們可以在此找到3個小時,而其他人在幾分鐘內就可以找到它 – Toad

+0

適合每個人;)。下面是對它的解釋 - 「配置文件中指定的服務名稱屬性作爲相應ExchangeService.svc的查找鍵,它告訴主機環境該配置屬於哪個服務。」 [來源:http://msdn.microsoft.com/en-us/library/bb332338。aspx] – urig

+0

雖然整個WPF體驗讓我有些害怕。表面上它只是在源代碼中添加一些屬性。但配置和來回發送的東西(我嗅到它)是複雜的,令人驚訝的。爲了與其他技術(如PHP)進行互操作,我甚至不敢碰它。 – Toad

3

它不是一個案件的東西,是什麼呢?你的網絡配置說,

WCFtest.testservice 

,但你的代碼說

WCFtest.TestService 

所以我懷疑的情況下,可以做一些事情的差異;通常,C#類型區分大小寫。我是新來的WCF,雖然...