2010-02-09 3 views
3

Поскольку я созерцаю использовать WCF, я подумал, что лучше всего просто следовать простому учебному пособию, чтобы мои ноги были мокрыми.WCF Exception: 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(); 

мой тест 'ФОС сервис'

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

Атрибут «name» элемента в app.config чувствителен к регистру.

Вместо "WCFTest.testservice", вам нужно указать "WCFtest.TestService" как так:

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

Хороший улов. Я думал, что на самом деле это любое имя, которое вы ему дадите. Но вы говорите, что он должен соответствовать классу, который реализует службу. Благодаря! Amamzing, как можно искать в течение 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, хотя ...