2010-02-09 89 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,虽然...