При запуске тестового клиента 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, а не библиотека, и все это работает сейчас. Что-то странное между двумя файлами конфигурации, которые я думаю. Мне все равно было бы интересно узнать, почему это никогда не сработало, но я также понимаю, что может быть сложно диагностировать кого-то, не имея полного доступа к источнику
Включить трассировку WCF, чтобы увидеть, что происходит не так. – CodeCaster
Я не вижу строку подключения на вашем веб-сайте веб-сайта web.config.Если службе необходимо получить доступ к БД с использованием строки подключения, строка подключения должна быть в файле web.config приложения-хостинга. То же самое касается других параметров конфигурации, которые вы используете в сервисе. –
А, может быть, на что-то тогда. Строка подключения находится в app.config библиотеки сервисов, которая потребляется сайтом WCF, я не думал, что сайту нужны и cs. Будет проверять это. – James