我正在尝试创建一个验证数据库中数据并通知用户错误的进程。我最初的想法是创建一个在用户保存Web表单时触发的Web服务。该Web服务将开始验证数据并在另一个表中填充其认为无效的信息的过程。从一开始我就打算让这个Web服务在实际完成数据验证之前立即返回。数据验证将是一个较长的过程,并不打算进行表单验证。如果碰巧失败也没关系,因为这个过程每天晚上都会刷新,所以我并不担心。
OneWay服务似乎是最合理的选择。我已经编写了这项服务,一切都很好,没有OneWay存在。然而,当我添加OneWay时,该过程不再有效。对我来说特别令人费解的是我有一行在Web服务方法的最开头输出一个日志文件,它偶尔在我调用服务时写日志。不是每次都有,但有时候。我还有多个日志语句可以输出,并且一旦启用isOneWay,它从未超过第一行。似乎代码只是被任意停止。有没有人遇到过这个?我的下一个选择是创建一个网络队列任务,直接接收Web服务调用并将其添加到其队列中,我希望避免这样做。
更多背景信息,我是WCF服务的新手,但不是一般的Web服务。 Web应用程序是用ASP.Net编写的,并通过HttpGet调用Web服务。
我对其他架构建议持开放态度,非常感谢任何输入。
以下是web.config中的ServiceModel元素:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="WebHttpBinding_Service">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpTransport authenticationScheme="Negotiate,Ntlm"/>
</binding>
</customBinding>
<webHttpBinding>
<binding name="webHttpBinding_IISAuthen">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="Namespace.Service" behaviorConfiguration="Namepsace.ServiceBehavior">
<endpoint address="" behaviorConfiguration="Namespace.ServiceAspNetAjaxBehavior"
binding="webHttpBinding" bindingConfiguration="webHttpBinding_IISAuthen" contract="Namespace.Service" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="Namespace.ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Namespace.ServiceBehavior">
<!-- 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 aspNetCompatibilityEnabled="true" />
<client>
<endpoint binding="customBinding" bindingConfiguration="WebHttpBinding_Service"
contract="Service" name="WebHttpBinding_Service" />
</client>
</system.serviceModel>
答案 0 :(得分:1)
当在WCF中遇到类似这些问题时,在更改配置时某些东西停止工作时,我肯定会开始追踪正在运行的服务。 WCF有一个很好的跟踪机制,您可以通过编辑配置来开始。您可以阅读有关配置它的所有信息here。
答案 1 :(得分:0)
我发现了这个问题。这可能看起来很奇怪,但服务是在同一个项目中运行的,这似乎导致了将其用作单向服务的问题。我把它移到了自己的项目中,一切按预期工作。
我感谢大家的时间,这种追踪肯定会在未来发挥作用。