Подтвердить что ты не робот

Самостоятельная служба WCF в Моно

В настоящее время я работаю над проектом С#, который представляет собой консольное приложение, в котором размещено WC-мыло.

Ниже приведен код, который я использую, чтобы открыть хост.

var baseAddress = new Uri(Configuration.soapServerSettings.soapServerUrl);
var host = new ServiceHost(typeof(SoapServer), baseAddress);
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();

var meta = new ServiceMetadataBehavior()
{
    HttpGetEnabled = true,
    HttpGetUrl = new Uri("", UriKind.Relative)
};

host.Description.Behaviors.Add(meta);

var debugBehaviour = new ServiceDebugBehavior()
{
    HttpHelpPageEnabled = true,
    HttpHelpPageUrl = new Uri("", UriKind.Relative),
    IncludeExceptionDetailInFaults = true
};

ServiceEndpoint endpnt = host.AddServiceEndpoint(
    typeof(ISoapInterface),
    basicHttpBinding,
    "EmailServer");

host.Description.Behaviors.Remove(typeof(ServiceDebugBehavior));
host.Description.Behaviors.Add(debugBehaviour);
host.Open();

Это отлично работает в Windows, но в Linux, когда я получаю доступ к нему, я получаю следующее сообщение:

Ошибка XmlSchema: Именованный элемент http://schemas.microsoft.com/2003/10/Serialization/:anyType был уже содержащихся в таблице объектов схемы. Рассмотрите настройку MONO_STRICT_MS_COMPLIANT на "да", чтобы имитировать реализацию MS. Связанный Элемент схемы SourceUri:, Строка 3, Позиция 3.

Я не знаю, с чего начать изучать эту проблему.

Спасибо за любую помощь, которую вы можете предоставить

Update: Согласно предложению Роб Гудвинса, я добавил MONO_STRICT_MS_COMPLIANT в качестве переменной среды, которая, похоже, сработала, я могу получить доступ к этой службе. Однако сейчас у меня другая проблема. У меня есть страница PHP, которая выполняет несколько запросов каждые пару секунд, но через минуту мое приложение падает.

Я получаю следующее исключение:

Этот XmlWriter не принимает StartTag в этом состоянии Ошибка. в System.Xml.XmlTextWriter.WriteStartElement(префикс System.String, System.String localName, System.String namespaceUri) [0x00000] в: 0 на System.Xml.DefaultXmlWriter.WriteStartElement(префикс System.String, System.String localName, System.String ns) [0x00000] в: 0 в System.Xml.XmlWriter.WriteStartElement(System.String localName, System.String ns) [0x00000] в: 0 at System.ServiceModel.Logger.TraceCore(TraceEventType eventType, Int32 id, Boolean hasRelatedActivity, Guid relatedActivity, System.Object [] данные) [0x00000] в: 0 на System.ServiceModel.Logger.LogMessage(System.ServiceModel.Diagnostics.MessageLogTraceRecord log) [0x00000] в: 0 в System.ServiceModel.Logger.LogMessage(MessageLogSourceKind sourceKind, System.ServiceModel.Channels.Message & msg, Int64 maxMessageSize) [0x00000] в: 0 на System.ServiceModel.Channels.Http.HttpRequestContext.InternalReply(System.ServiceModel.Channels.Message msg, тайм-аут TimeSpan) [0x00000] в: 0 на System.ServiceModel.Channels.Http.HttpRequestContext.Reply(System.ServiceModel.Channels.Message msg, тайм-аут TimeSpan) [0x00000] в: 0 на System.ServiceModel.Dispatcher.MessageProcessingContext.Reply(Boolean useTimeout) [0x00000] в: 0 на System.ServiceModel.Dispatcher.OperationInvokerHandler.Reply(System.ServiceModel.Dispatcher.MessageProcessingContext mrc, Boolean useTimeout) [0x00000] в: 0 на System.ServiceModel.Dispatcher.OperationInvokerHandler.ProcessRequest(System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] в: 0 на System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain(System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] в: 0 на System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain(System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] в: 0 на System.ServiceModel.Dispatcher.HandlersChain.ProcessRequestChain(System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] в: 0 на System.ServiceModel.Dispatcher.BaseRequestProcessor.ProcessRequest(System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] в: 0

Необработанное исключение: System.InvalidOperationException: этот XmlWriter не принимает StartTag в этом состоянии Ошибка. в System.Xml.XmlTextWriter.WriteStartElement(префикс System.String, System.String localName, System.String namespaceUri) [0x00000] в: 0 на System.Xml.DefaultXmlWriter.WriteStartElement(префикс System.String, System.String localName, System.String ns) [0x00000] в: 0 в System.Xml.XmlWriter.WriteStartElement(System.String localName, System.String ns) [0x00000] в: 0 at System.ServiceModel.Logger.TraceCore(TraceEventType eventType, Int32 id, Boolean hasRelatedActivity, Guid relatedActivity, System.Object [] данные) [0x00000] в: 0 на System.ServiceModel.Logger.Log(TraceEventType eventType, Сообщение System.String, System.Object [] args) [0x00000] в: 0 в System.ServiceModel.Logger.Error(System.String message, System.Object [] args) [0x00000] в: 0 at System.ServiceModel.Dispatcher.ListenerLoopManager.ProcessErrorWithHandlers(IChannel ch, System.Exception ex, System.ServiceModel.Channels.Message & res) [0x00000] в: 0 на System.ServiceModel.Dispatcher.ListenerLoopManager.ProcessRequest(IRplyChannel reply, System.ServiceModel.Channels.RequestContext rc) [0x00000] в: 0 на System.ServiceModel.Dispatcher.ListenerLoopManager.TryReceiveRequestDone(Результат IAsyncResult) [0x00000] в: 0

Я также не могу получить доступ к службе через VS2010 WCF Test Client, это не ошибка, она просто сидит там с индикатором выполнения на уровне 50% и больше не получает.

В журнале ошибок apache появляется следующая ошибка:

System.ArgumentException: должно быть что-то вроде [[hostname:] port:] VPath: realpath at Mono.WebServer.ApplicationServer.AddApplicationsFromCommandLine(Приложения System.String) [0x00000] в: 0 на (обход-удалять-вызывать-с-проверкой) Mono.WebServer.ApplicationServer: AddApplicationsFromCommandLine (строка) в Mono.WebServer.Apache.Server.RealMain(System.String [] args, Boolean root, IApplicationHost ext_apphost, Boolean quiet) [0x00000] в: 0 at (обертка remoting-invoke-with-check) Mono.WebServer.Apache.Server: RealMain (строка [], bool, Mono.WebServer.IApplicationHost, bool) в Mono.WebServer.Apache.Server.Main(System.String [] args) [0x00000] в: 0 [ОШИБКА] FATAL UNHANDLED EXCEPTION: System.ArgumentException: должно быть что-то вроде [[hostname:] port:] VPath: realpath at Mono.WebServer.ApplicationServer.AddApplicationsFromCommandLine(Приложения System.String) [0x00000] в: 0 на (обход-удалять-вызывать-с-проверкой) Mono.WebServer.ApplicationServer: AddApplicationsFromCommandLine (строка) в Mono.WebServer.Apache.Server.RealMain(System.String [] args, Boolean root, IApplicationHost ext_apphost, Boolean quiet) [0x00000] в: 0 at (обертка remoting-invoke-with-check) Mono.WebServer.Apache.Server: RealMain (строка [], bool, Mono.WebServer.IApplicationHost, bool) в Mono.WebServer.Apache.Server.Main(System.String [] args) [0x00000] в: 0

Обновление 2: Кажется, сейчас у меня это работает, но я могу только получить доступ к сервису локально. То есть веб-службу можно получить локально, а функции выполняют то, что должны, но я не могу получить к ней доступ с другого ПК. То есть Я пытаюсь получить доступ к службе WCF на сервере Mono с помощью тестового клиента WCF с моего компьютера-разработчика с dev-компьютера, и затем я получаю следующий вывод:

Ошибка: невозможно получить метаданные из http://192.168.1.74:6525/ Если это это служба Windows (R) Communication Foundation, к которой у вас есть доступа, убедитесь, что вы включили публикацию метаданных на указанный адрес. Чтобы помочь в публикации метаданных, пожалуйста, обратитесь к документации MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadataобмен URI ошибки: http://192.168.1.74:6525/ Метаданные содержат ссылку, которая не может быть решена: 'http://192.168.1.74:6525/ '.
Content Type application/soap + xml; charset = utf-8 не поддерживался службы http://192.168.1.74:6525/. Связывание клиентов и сервисов могут быть несовместимы. Удаленный сервер возвратил ошибку: (415) Ожидаемый тип содержимого text/xml; charset = utf-8 ', но получил "Приложения/мыло + XML; charset = utf-8'.HTTP GET Ошибка URI: http://192.168.1.74:6525/ Документ был понят, но он мог не обрабатываться. - Документ WSDL содержит ссылки, которые не могли быть разрешенным. - Произошла ошибка при загрузке http://localhost:6525/?xsd=xsd0 '. - Не удается подключиться к удаленному server - соединение не может быть выполнено, поскольку целевая машина активно отказался от него 127.0.0.1:6525.

Обновление 3: При дальнейшем тестировании это выглядит так, как если бы многие звонки были сделаны в службу за один раз. Постоянно зависающее обновление на странице браузера, использующее сервис, похоже, разбивает его.

Похоже, что что-то не так с System.ServiceModel.Logger.TraceCore внутри Mono. Есть ли способ отключить эту часть моно, чтобы я не затронул эту проблему.

4b9b3361

Ответ 1

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