Ganeshh2 Ответов: 4

Я получил следующее исключение при использовании службы WCF в веб-приложении(служба WCF дает ответ в формате Json)


Там не было конечной точки прослушивания http://localhost:7783/GetDataService.svc/JSONData это могло бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Более подробную информацию см. В разделе InnerException, если таковое имеется.

4 Ответов

Рейтинг:
36

vijay4mgvrm

Привет Ганеш,

У меня такая же проблема в clint application. Но это сработало, когда я изменил свойство в интерфейсе службы, как показано ниже:

[WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.формат JSON,
BodyStyle = WebMessageBodyStyle.Голый)]


Ganeshh2

Привет Виджай,

Поблагодарить у очень многое..
u R опубликовал точное решение моей проблемы. моя проблема была решена с помощью ur solution.

Mohammed Hameed

Поздравляю Ганешу и благодарю Виджая...

К сожалению, мое решение не сработало. Во всяком случае хорошо, что я тоже кое-чему научился. Спасибо...

Рейтинг:
1

Mohammed Hameed

Файл конфигурации службы:

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

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above 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="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>



Файл конфигурации приложения:

<pre>
<configuration>
  
    <system.servicemodel>
        <bindings>
            <basichttpbinding>
                <binding name="BasicHttpBinding_IMainService" closetimeout="00:01:00">
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerquotas maxdepth="32" maxstringcontentlength="8192" maxarraylength="16384">
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientcredentialtype="None" proxycredentialtype="None">
                            realm="" />
                        <message clientcredentialtype="UserName" algorithmsuite="Default" />
                    </transport></security>
                </readerquotas></binding>
            </basichttpbinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:1298/MainService.svc" binding="basicHttpBinding">
                bindingConfiguration="BasicHttpBinding_IMainService" contract="MainServiceAgent.IMainService"
                name="BasicHttpBinding_IMainService" />
        </endpoint></client>
    </system.servicemodel>
</configuration>


Ganeshh2

хороший Мохаммед, но с помощью basicHttpBinding я получил out put, но мы не получили правильных данных формата "Json". для данных Json "webHttpbinding" должен быть использован правильно. для webHttpBinding" я получил это исключение. пожалуйста, дайте объяснение.

Mohammed Hameed

Хммм. Ладно, по крайней мере, теперь мы узнали настоящую проблему. Это здорово... Во всяком случае, я мало что знаю об использовании Json (так как я использовал его очень давно). Но я бы посоветовал вам прочитать эту короткую статью об этом: "http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON" я надеюсь, что это даст вам идею решить вашу проблему.

Ganeshh2

Большое вам спасибо, Мохаммед, я пройду по этой ссылке.

Mohammed Hameed

Пожалуйста :)

Mohammed Hameed

Есть успехи, Ганеш?

Рейтинг:
1

ahsan.subiya

Hi Mohammed i have the same issue <big><small></small></big> please what is wrong with my service web config and Client app config

Service config


& lt;system. servicemodel>

< Услуги>

< имя службы= " ProductWebserviceapp.Продукт "behaviorconfiguration=" ServiceBehavior " >

&ЛТ;конечная точка привязки="привязку webhttpbinding" договора="ProductWebserviceapp.ИП"&ГТ;
behaviorConfiguration= "webHttp" >
& lt;идентичность>
& lt;dns value= "localhost">



в <адрес конечной точки="мекс" привязки="mexHttpBinding" договора="реализацией интерфейса imetadataexchange"&ГТ;


<servicehostingenvironment aspnetcompatibilityenabled= "true" multiplesitebindingsenabled= "true">
& lt;standardendpoints>
< webhttpendpoint>
<standardendpoint name="">
helpEnabled= " true"
automaticFormatSelectionEnabled= " true"
defaultOutgoingResponseFormat="в формате JSON"
crossDomainScriptAccessEnabled= "true"/>


< поведение>
& lt;servicebehaviors>

< имя поведения= "ServiceBehavior">
<servicemetadata httpgetenabled= "true">
&ЛТ;servicedebug includeexceptiondetailinfaults значения="Правда"и GT;
<datacontractserializer maxitemsinobjectgraph= "50485760">






& lt;поведение>

<servicemetadata httpgetenabled= "true">

& lt;servicedebug includeexceptiondetailinfaults= "false">



<endpointbehaviors>
< имя поведения= "webHttp">
< webhttp helpenabled= "True">






& lt;привязки>






< system. webserver>
& lt;модули runallmanagedmodulesforallrequests= "true">





Конфигурация приложения

& lt;system. servicemodel>

< клиент>
< адрес конечной точки="http://localhost/ProductPublish/Product.svc" >
привязка="привязку webhttpbinding"
behaviorConfiguration="используемый"
контракт= " продукт.ИП"
name= " SinglePageAngularJS.Продукт " / & gt;

< поведение>
<endpointbehaviors>
<имя поведение="используемый"и GT;
< webhttp defaultbodystyle= "завернутый" >
defaultOutgoingResponseFormat="XML-файле"
helpEnabled= "true"/>






< appsettings>
< add key= "webpages:Version" value= "2.0.0.0">
&ЛТ;добавить ключ="страниц:включено" значение="ложь"и GT;
&ЛТ;добавить ключ="PreserveLoginUrl" значение="истинный"и GT;
&ЛТ;добавить ключ="ClientValidationEnabled" значение="истинный"и GT;
&ЛТ;добавить ключ="UnobtrusiveJavaScriptEnabled" значение="истинный"и GT;

&ЛТ;система.веб&ГТ;
&ЛТ;компиляция отладка="истинный" targetframework="4.5"и GT;
< httpruntime targetframework= "4.5">
< режим аутентификации= "формы" >
< forms loginurl="~/Account/Login "timeout= "2880">

< страницы>
& lt;пространства имен>
& lt;добавить пространство имен= "System. Web. Helpers">
&ЛТ;добавить пространство имен="системы.Веб.В MVC"и GT;
&ЛТ;добавить пространство имен="системы.Веб.В MVC.Аякс"и GT;
< добавить пространство имен="System.Web.Mvc.Html" >
&ЛТ;добавить пространство имен="системы.Веб.Оптимизация"и GT;
&ЛТ;добавить пространство имен="системы.Веб.Маршрутизация"и GT;
&ЛТ;добавить пространство имен="системы.Веб.Веб-страниц"и GT;



< system. webserver>
<validation validateintegratedmodeconfiguration= "false">
& lt;обработчики>
& lt;remove name= "ExtensionlessUrlHandler-ISAPI-4. 0_32bit">
& lt;remove name= "ExtensionlessUrlHandler-ISAPI-4. 0_64bit">
& lt;remove name= "ExtensionlessUrlHandler-Integrated-4.0">
&ЛТ;добавить имя="ExtensionlessUrlHandler-ISAPI в-4.0_32bit" путь="*." глагол="Вам,глава,пост,отладки,поставить,удалить,патч,варианты" модулей="модулем isapimodule" scriptprocessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" предпосылкой="classicMode,runtimeVersionv4.0,bitness32" responsebufferlimit="0"&ГТ;
&ЛТ;добавить имя="ExtensionlessUrlHandler-ISAPI в-4.0_64bit" путь="*." глагол="Вам,глава,пост,отладки,поставить,удалить,патч,варианты" модулей="модулем isapimodule" scriptprocessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" предпосылкой="classicMode,runtimeVersionv4.0,bitness64" responsebufferlimit="0"&ГТ;
&ЛТ;добавить имя="ExtensionlessUrlHandler-интегрально-4.0" путь="*." глагол="Вам,глава,пост,отладки,поставить,удалить,патч,настройки" тип="системы.Веб.Обработчиков.Transferrequesthandler "предварительное условие=" integratedMode, runtimeVersionv4. 0 " >

& lt;runtime>
< assemblybinding xmlns= "urn:schemas-microsoft-com:asm. v1" >
& lt;зависимая сборка>
&ЛТ;assemblyidentity наименование="системы.Веб.Помощники текста" PublicKeyToken="31bf3856ad364e35"&ГТ;
&ЛТ;перенаправления привязки старую версию="1.0.0.0-2.0.0.0" новаяверсия="2.0.0.0"&ГТ;

& lt;зависимая сборка>
&ЛТ;assemblyidentity наименование="системы.Веб.В MVC текста" PublicKeyToken="31bf3856ad364e35"&ГТ;
&ЛТ;перенаправления привязки старую версию="1.0.0.0-4.0.0.0" новаяверсия="4.0.0.0"&ГТ;

& lt;зависимая сборка>
&ЛТ;assemblyidentity наименование="системы.Веб.Страницы текста" PublicKeyToken="31bf3856ad364e35"&ГТ;
&ЛТ;перенаправления привязки старую версию="1.0.0.0-2.0.0.0" новаяверсия="2.0.0.0"&ГТ;



& lt;entityframework>
&ЛТ;объект defaultconnectionfactory тип="системы.Данных.Лица.Инфраструктура.LocalDbConnectionFactory, EntityFramework " >
< Параметры>
& lt;значение параметра= "v12. 0">




Пожалуйста решите этот вопрос я очень расстроен


Richard Deeming

Если вы хотите задать вопрос, то ЗАДАВАТЬ ВОПРОС[^].

НЕ опубликуйте свой вопрос как "решение" чьего - то другого вопроса- особенно когда этот вопрос был решен ТРИ ГОДА НАЗАД.

Рейтинг:
0

Mohammed Hameed

Привет Ганеш,

Проверьте url-адрес службы (Проверьте url-адрес, открыв его в любом браузере, например Internet explorer.): http://localhost:7783/GetDataService.svc/JSONData[^] независимо от того, работает он или нет.

Если нет, то вам нужно щелкнуть правой кнопкой мыши на файле SVC и выбрать опцию Открыть в веб-браузере.

Это могло бы решить проблему. Но если вы все еще сталкиваетесь с этой проблемой, пожалуйста, дайте мне знать.


Ganeshh2

Привет Мохаммед,

мой адрес службы WCF: "http://localhost:7783/GetDataService.svc - это работает. Но когда я пытаюсь вызвать метод службы "JSONData ()" из моего веб-приложения, он дает вышеупомянутое исключение "http://localhost:7783/GetDataService.svc/JSONData". что мне нужно сделать?

Mohammed Hameed

Ладно, хорошо, что служба работает нормально. Не могли бы вы дважды проверить конечные точки в конфигурационном файле?
Кроме того, используйте WCFTestClient.exe чтобы проверить, работает ли метод JSONData() нормально или нет. Он находится где-то здесь: "C:\Program файлы\Microsoft Visual Studio 10.0\Common7\

Ganeshh2

Да, он работает в WCFTestClient.exe. теперь он показывает исключение типа "удаленный сервер вернул неожиданный ответ: (405) метод не разрешен" в моем веб-приложении.

Mohammed Hameed

Хммм. Тогда, вероятно, есть проблема с самим методом JSONData (). Итак, поставьте точку останова в методе и запустите приложение, прикрепив к нему свое служебное приложение (или запустив службу в wcfTestClient) для отладки. Таким образом, вы можете проследить, что неправильно происходит в методе. Это, вероятно, должно привести вас к реальной проблеме, и, следовательно, вы также можете решить ее.

Пожалуйста, обновляйте меня по любым вопросам...

Ganeshh2

Метод JSONDATA() отлично работает в WCFTestClient.exe инструмент, но моя проблема в том, что когда этот метод вызывается из моего веб-приложения, он дает это исключение: "удаленный сервер вернул неожиданный ответ: (405) метод не разрешен".

Mohammed Hameed

Убедитесь, что конфигурации конечной точки службы и привязок верны в конфигурационном файле.
Или лучше удалить свой сервисный агент и воссоздать его заново, чтобы при возникновении каких-либо проблем в старых прокси-серверах он отключился. И новые прокси будут созданы wcf.
Проверьте также эту ссылку: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/7c9c7c8d-cf02-42a2-aca3-ba2749f5af4e это может дать вам и другой намек.

Ганеш, дай мне знать, если тебе понадобится еще помощь.

Ganeshh2

Я сделал так, как вы сказали, но проблема не была решена.. опять же, это показывает приведенное выше исключение.

Mohammed Hameed

Любые другие методы обслуживания работают или дают ту же ошибку?

Ganeshh2

да, для других методов обслуживания он также показывает такое же исключение.

Mohammed Hameed

Можете ли вы прислать мне скриншот ошибки, если это возможно?

Mohammed Hameed

Вам не хватает использования атрибутов контрактов, таких как [OperationContract] поверх методов интерфейса?

Ganeshh2

нет, этого не хватает. я также использовал атрибут webinvoke для ответа json.

Mohammed Hameed

Ваша служба работает через IIS или через visual studio?
Можете ли вы прислать мне скриншот ошибки и полную информацию об исключении, чтобы получить четкую картину того, что происходит?

Ganeshh2

Сообщение об исключении:ProtocolException было обработано пользовательским кодом
Удаленный сервер вернул неожиданный ответ: (405) метод не разрешен.
--------------------------------------------------
мой код таков :

Интерфейс в службе WCF :

публичный интерфейс IGetDataService
{
[OperationContract]
[WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Завернутый)]
строки данных XML(идентификатор строки);
[OperationContract]
[WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.В Формате JSON, Кузов = WebMessageBodyStyle.Завернутый)]
строка JSONData();

[OperationContract]
[WebGet (ResponseFormat = WebMessageFormat.В Формате JSON, Кузов = WebMessageBodyStyle.Завернутый, UriTemplate = " json/xml")]
Список & lt;topicsnames> GetTopicsNames();
}

[DataContract]
публичные темы классов
{
string qbmaintopics = строка.Пустой;

[параметр DataMember]
публичная строка QBMaintopics
{
get { return qbmaintopics; }
set { qbmaintopics = значение; }
}

}
------------------------------------------------------
код веб-приложения, в котором я использую службу WCF, является :

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
использование системы.Сеть;
используя системы.Веб.ИП;
используя системы.Веб.Пользовательского интерфейса.WebControls;
использование ExampleService;
использование System.Net;
использование системы.ИО;
используя системы.Во время выполнения.Сериализация.формат JSON;

общественный разделяемого класса _default : на системы.Веб.Пользовательского интерфейса.Страницы
{
GetDataServiceClient objService = null;

protected void Page_Load(отправитель объекта, EventArgs e)
{
objService = новый GetDataServiceClient();
}

охраняемых недействительными btnGetMaintopics_Click(объект отправителя, EventArgs в электронной)
{
строка str = objService.JSONData();
lbldata.Текст = str;
}
}

Ganeshh2

Мой сервис работает через visualstudio..

Ganeshh2

Мохаммед, если ты найдешь какое-нибудь решение? пожалуйста, дайте мне знать....!

Mohammed Hameed

То же самое прекрасно работает и в моей системе.
Тогда я думаю, что это проблема, связанная с портом. Возможно, другие порты, такие как 7783, заблокированы брандмауэром windows. Итак, что вы можете сделать, так это проверить, можете ли вы разрешить этот порт через брандмауэр, а также предоставить статический порт вашей службе, перейдя в свойства проекта Serivce - >выберите вкладку Web - >В разделе серверы выберите опцию конкретный порт, а затем введите его там.

Пожалуйста, обновите меня, если понадобится еще какая-нибудь информация...

Ganeshh2

можете ли вы предложить какой-либо порт no n еще одна вещь в моей системе IIS не установлен

Mohammed Hameed

Вы можете использовать любой порт, например 15000, но убедитесь, что этот порт разрешен через ваш брандмауэр.

Но если это также не работает, то просто попробуйте порт 8080 (на самом деле это порт по умолчанию, назначенный для веб-сайта по умолчанию, но в любом случае, как вы сказали, у вас не включена функция IIS, вы можете попробовать).

IIS не требуется, если вы запускаете службу через VS (VS использует встроенный веб-сервер cassini).

Ganeshh2

как мы можем узнать, разрешен ли номер порта брандмауэром или нет?

Mohammed Hameed

перейдите в Панель управления- & gt;введите брандмауэр в текстовом поле поиска в верхнем углу->появится Брандмауэр Windows - >Здесь нажмите на кнопку "Разрешить программу через Брандмауэр windows" - & gt;Там вы можете добавить порт для разрешения.
Или, если это также не сработает в случае, то временно выключите брандмауэр, а затем запустите свою службу и приложение.

Ganeshh2

Большое спасибо Вам, Мохаммед, за то, что вы проявили интерес к решению моей проблемы...

можете ли вы прислать мне код файлов "web. config" как службы WCF, так и веб-приложений.

Mohammed Hameed

Спасибо за голос, Ганеш!

Mohammed Hameed

Можете ли вы также принять мое решение 1?

Ganeshh2

Пожалуйста, пришлите мне коды файлов "web. config".

Mohammed Hameed

Веб-служба.конфиг:


& lt;конфигурация>

&ЛТ;система.веб&ГТ;
&ЛТ;компиляция отладка="истинный" targetframework="4.0"и GT;

& lt;system. servicemodel>
< поведение>
& lt;servicebehaviors>
& lt;поведение>
<!-- Чтобы избежать раскрытия информации о метаданных, установите значение ниже false и удалите конечную точку метаданных выше перед развертыванием -->
<servicemetadata httpgetenabled= "true">
<!-- Чтобы получить сведения об исключениях в ошибках для целей отладки, установите приведенное ниже значение true. Установите значение false перед развертыванием, чтобы избежать раскрытия информации об исключениях -->
& lt;servicedebug includeexceptiondetailinfaults= "false">



<servicehostingenvironment multiplesitebindingsenabled= "true">

< system. webserver>
& lt;модули runallmanagedmodulesforallrequests= "true">


Mohammed Hameed

Теги автоматически удаляются, если я публикую их в качестве комментария.

Хорошо, тогда я опубликую это как решение.

Mohammed Hameed

Большое спасибо Ганеше за то, что он принял мое решение.

Кстати, вопрос решен или нет?

Ganeshh2

Все в моем коде правильно, но я думаю, что ndue к сетевой проблеме только я получил это исключение, но u дал хорошее объяснение сетевой проблеме. но моя проблема еще не решена, поэтому я спрашиваю код файлов web.config.

Mohammed Hameed

Plz check Solution 2 я разместил конфигурационные файлы.

Вы установили порт и разрешили его через брандмауэр или, по крайней мере, отключили брандмауэр ur?