2013-05-03 3 views
0

При запуске тестового клиента WCF и локальном отладке службы WCF все работает нормально. После того, как я развернул его в IIS на удаленном сервере, а затем попробую загрузить его с помощью тестового клиента WCF, я начинаю получать ошибки «Объект не установлен в экземпляр объекта». Я добавил попытку к службе, и ошибка изменилась на «Метод не разрешен».Ошибка WCF - метод не разрешен

Я читал об этих ошибках весь день, и большинство сообщений относятся к людям, использующим JSON или AJAX, для доступа к их клиенту WCF. Я пробовал многие из предлагаемых решений, большинство из которых были изменены в web.config. Я просто получаю доступ к нему с помощью тестового клиента на этом этапе, он будет использоваться приложением Winform, когда-то доказанным для работы.

2 метода, выставленные в службе, создают соединение с SQL-сервером в другом домене, хотя есть настроение доверия. Я думаю, что это может быть частью проблемы.

My Service Interface

[ServiceContract] 
public interface IMeterQueryService 
{ 
    [OperationContract] 
    List<Meter> FindMeter(string mprn); 

Реализована служба

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class MeterQueryService : IMeterQueryService 
{ 
    public List<Meter> FindMeter(string mprn) 
    { 
     using (var da = new DataAccess()) 
     { 

     var meters = da.GetMeter(mprn); 
     da.Dispose(); 
     return meters; 

     } 
    } 

App Config File

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <connectionStrings> 
    <add name="Tims" connectionString="hidden" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 
    <services> 
     <service name="TimsAPI.MeterQueryService"> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, 
      set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

веб-конфигурационный файл, сайт ссылается на библиотеку WCF службы.

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="false" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="TimsAPI.MeterQueryService"> 
     <endpoint address="http://easvr33:1000/" binding="basicHttpContextBinding" bindingConfiguration="" 
      contract="TimsAPI.IMeterQueryService" /> 
     <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="localhost" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 

</configuration> 

Update

Я воссоздал службу WCF, как веб-сайт службы WCF, а не библиотека, и все это работает сейчас. Что-то странное между двумя файлами конфигурации, которые я думаю. Мне все равно было бы интересно узнать, почему это никогда не сработало, но я также понимаю, что может быть сложно диагностировать кого-то, не имея полного доступа к источнику

+0

Включить трассировку WCF, чтобы увидеть, что происходит не так. – CodeCaster

+0

Я не вижу строку подключения на вашем веб-сайте веб-сайта web.config.Если службе необходимо получить доступ к БД с использованием строки подключения, строка подключения должна быть в файле web.config приложения-хостинга. То же самое касается других параметров конфигурации, которые вы используете в сервисе. –

+0

А, может быть, на что-то тогда. Строка подключения находится в app.config библиотеки сервисов, которая потребляется сайтом WCF, я не думал, что сайту нужны и cs. Будет проверять это. – James

ответ

0

Когда служба WCF размещается через Веб-сайт IIS служба app.config не используется, и вместо этого загружается web.config сайта шлангового соединения. Все настройки, необходимые для работы службы, должны быть дублированы на web.config сайта-хостинга.

+0

У меня есть минутное время для подачи награды, я буду придерживаться его завтра. – James

0

Возможно, возникнет проблема с обслуживанием SVC. От here:

1.Откройте свойства своего виртуального каталога.

2. Перейти на вкладку «Каталог».

3.Нажмите «Конфигурация».

4.Click Добавить ...

5.Provide следующая информация:

a.Executable: C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll

b.Extension: .svc

c.Verbs: GET, HEAD, POST, DEBUG

+0

У меня он был развернут на IIS в качестве веб-сайта. Должно ли это быть в приложении или VD на веб-сайте? – James

Смежные вопросы