Это может быть связано с привязкой конечной точки службы, не использующей протокол HTTP
у меня есть WCF сервис работает нормально на моей локальной машине. Я положил его на серверы, и я получаю следующую ошибку:
ошибка при получении HTTP-ответа http://xx.xx.x.xx:8200/Services/WCFClient.svc. Это может быть связано с обслуживанием привязка конечной точки без использования HTTP протокол. Это также может быть связано с HTTP запрос контекста прервано сервер (возможно, из-за выключение службы). Посмотреть сервера журналы для более подробной информации.]
Я пошел на службу в URL и он работает правильно. Все, что я делаю для функции, это возвращаю строку имени изображения, поэтому передаваемых данных не так много. Я отследил журнал, и он дает мне ту же информацию. Вот мой клиент config:
<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient"
address="http://localhost:4295/Services/WCFClient.svc"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_IWCFClient"
behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
contract="WCFClient.IWCFClient" />
вот моя конфигурация сервера:
<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
name="WCFGraphicManagementTool.Services.WCFClient">
<endpoint name="basicHttpBinding_IWCFClient"
address=""
binding="basicHttpBinding"
contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
maxConcurrentInstances="120" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
будет ли это настройка на сервере, так как она работает на моей локальной машине?
20 ответов
Я думаю, что есть проблема сериализации, вы можете найти точную ошибку, просто нужно добавить ниже код в Service config в .
после обновления конфигурации "App_tracelog.svclog"
файл будет создан, где существует ваш сервис просто нужно открыть .svclog
файл и найти красную цветовую линию на левой боковой панели, которая является ошибкой и см. ее описание для получения дополнительной информации.
Я надеюсь, что это поможет найти вашу ошибку.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
<listeners>
<add name="ServiceModelTraceListener" />
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
<listeners>
<add name="ServiceModelTraceListener" />
</listeners>
</source>
<source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
<listeners>
<add name="ServiceModelTraceListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
</sharedListeners>
</system.diagnostics>
У меня была эта проблема "это может быть связано с привязкой конечной точки службы, не использующей протокол HTTP", и служба WCF завершит работу (на машине разработки)
Я понял: в моем случае, проблема была из-за перечислений,
Я решил с помощью этого
[DataContract]
[Flags]
public enum Fruits
{
[EnumMember]
APPLE = 1,
[EnumMember]
BALL = 2,
[EnumMember]
ORANGE = 3
}
Мне пришлось украсить свои перечисления DataContract, флагами и всеми атрибутами enum члена EnumMember.
Я решил это, посмотрев на это в MSDN Ссылка:
У меня была такая же ошибка и проблема была в сериализации. Мне удалось найти реальную проблему с помощью Service Trace Viewer http://msdn.microsoft.com/en-us/library/ms732023.aspx и решил его легко. Может, это кому-то поможет.
в моем экземпляре ошибка была сгенерирована, потому что один из моих сложных типов имел свойство без метода set.
сериализатор бросил и исключение из-за этого факта. Добавлены внутренние методы set, и все работает нормально.
лучший способ выяснить, почему это происходит (на мой взгляд), чтобы включить ведение журнала трассировки.
Я достиг этого, добавив следующий раздел в свою сеть.config:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
<add type="System.Diagnostics.DefaultTraceListener" name="Default" />
</listeners>
</source>
<source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
<add type="System.Diagnostics.DefaultTraceListener" name="Default" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
после установки, я запустил клиент, есть исключения и проверил следы.svclog файл'. Оттуда мне нужно было только найти исключение.
решение с DataContract, флаги для перечислений выглядит немного уродливо. В моем случае проблема была решена путем добавления чего-то вроде "NotSet = 0" в перечисление:
public enum Fruits
{
UNKNOWN = 0,
APPLE = 1,
BALL = 2,
ORANGE = 3
}
Я понял, проблема. Это закончилось тем, что путь к моему файлу конфигурации был неправильным. Ошибки для WCF настолько полезны иногда.
Я видел эту ошибку, вызванную круговой ссылкой в графе объектов. Включение указателя на родительский объект из дочернего объекта приведет к циклу сериализатора и в конечном итоге превысит максимальный размер сообщения.
У меня была эта проблема, потому что я настроил свою службу WCF для возврата системы.Данные.объект DataTable.
Он отлично работал на моей тестовой HTML-странице, но взорвался, когда я поместил это в приложение Windows Form.
Мне пришлось войти и изменить подпись операционного контракта службы с DataTable на DataSet и вернуть данные соответственно.
Если у вас есть эта проблема, вы можете добавить дополнительный операционный контракт на обслуживание, чтобы вам не пришлось беспокойтесь о взломе кода, который полагается на существующие службы.
Это может быть связано со многими причинами; ниже приведены некоторые из них:
- Если вы используете сложные объекты контракта данных (это означает настраиваемый объект с более дочерними настраиваемыми объектами), убедитесь, что у вас есть все настраиваемые объекты, украшенные атрибутами DataContract и DataMember
Если объекты контракта данных используют наследование, убедитесь, что все базовые классы имеют атрибуты DataContract и DataMember. Кроме того, вам необходимо указать базовые классы производные классы с [KnownType(typeof(BaseClassType))] атрибут ( Проверьте больше информации здесь на этом).
убедитесь, что все свойства объекта контракта данных имеют свойства get и set.
моя проблема заключалась в том, что слишком много элементов передавалось между клиентом и сервером. Мне пришлось изменить в поведении обеих сторон.
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
подробнее об этой проблеме см. Также в разделе: существующее соединение было принудительно закрыто удаленным хостом-WCF
моя проблема заключалась в том, что мои объекты передачи данных были слишком сложными. Начать свойства спростая как public long Id { get; set; }
и как только вы получите эту работу, чем начать добавлять дополнительные вещи по мере необходимости.
моя проблема заключалась в том, что возвращаемый тип моей службы был string. Но я вернул строку типа xml:
<reponse><state>1</state><message>Operation was successfull</message</response>
таким образом была выдана ошибка.
эта ошибка может быть из-за несоответствия договору. Рассмотрим три слоя приложения ниже...
UI Layer
|
Слой Процесса
|
Уровень Доступа К Данным
- >Контракт между Process и UI layer имеет то же перечисление с missing (Onhold = 3). Перечисление: Start = 1, Stop = 2.
- >Контракт между доступом к данным и уровнем процесса имеет перечисление Enum: Start = 1,Stop = 2, Onhold = 3.
в этом случае мы получим ту же ошибку в process layer ответ.
та же ошибка возникает в другом несоответствии контракта в многослойном приложении.
Это может не иметь отношения к вашей конкретной проблеме, но сообщение об ошибке, которое вы упомянули, имеет много причин, одна из которых использует тип возврата для [OperationContract], который является абстрактным, интерфейсом или не известен клиентскому коду WCF.
Проверьте сообщение (и решение) ниже
Я думаю, что лучший способ решить эту проблему-следовать советам об ошибках, поэтому ищите журналы сервера. Чтобы включить журналы, я добавил
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
затем вы идете c:\logs\TracesServ_ce.svclog откройте его с помощью microsoft средство просмотра трассировки службы. И посмотрите, в чем проблема на самом деле.
Я боролся с этим в течение нескольких дней и пробовал каждый ответ из этого поста и многих других и поделиться своим решением, потому что симптомы были одинаковыми, но проблема была другой.
проблема заключалась в том, что пул приложений был настроен с ограничением памяти, и он просто перерабатывается через переменный период времени.
надеюсь, это поможет кому-то еще!
Привет,
в моем случае
мой сервис имеет функцию download Files
и эта ошибка отображается только при попытке скачать Big Files
Я нашел ответ увеличить maxRequestLength
до необходимого значения в web.config
Я знаю, что это странно, но проблема решена
если вы не делаете никаких операций загрузки или загрузки, возможно, этот ответ не поможет вам
также была эта проблема, и это было связано с забыванием украсить мою модель атрибутами DataContract и DataMember
для меня решения этой ошибки очень странные. Это был вопрос адреса порта EndpointAddress. В Visual studio адрес порта вашего файла (например, Service1.svc) и адрес порта вашего проекта wcf должен быть таким же, который вы даете в EndpointAddress. Позвольте мне подробно описать вам это решение.
есть два шага, чтобы проверить адреса портов.
в вашем проекте WCF щелкните правой кнопкой мыши файл службы (например, файл service1.svc) - > чем выбрать просмотр в браузере теперь в вашем браузере у вас есть url, как http://localhost:61122/Service1.svc теперь запишите свой адрес порта как 61122
Righ нажмите ваш проект wcf - > чем выбрать свойства -> перейти к Интернет -> теперь раздел сервера -> выберите Используйте Сервер Разработки Visual Studio -> выбрать Определенный Порт и дайте адрес порта, который мы ранее нашли в нашем Сервисе1.служба svc. Это (61122).
раньше у меня был другой адрес порта. После правильного указания адреса порта, который я дал в EndpointAddress моя проблема.
Я надеюсь, что это может быть решена ваша проблема.
чтобы исправить это, мы должны были изменил идентификатор AppPool на учетную запись администратора.