有一些类似的问题,我对MSMQ非常新.
我一直在尝试将ServiceContract和关联的DataContract链接到MSMQ,并设置了端点,以便DataContact消息在MSMQ中结束.
我已经验证了WCF服务正确生成了消息,我还可以看到消息在我发送到的队列的日志中,但不在我期望它们的实际"排队消息"区域中.
我目前没有使用交易,我已将安全性设置为无.我附上相关的代码,虽然我的感觉是我因为无知MSMQ而缺少一些基本的东西.任何指针将不胜感激.
服务和数据合同
[DataContract]
public class RegistrationMessage : IRegistrationMessage
{
[DataMember]
public string EMailAddress { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
[ServiceContract]
public interface IRegistration
{
[OperationContract(IsOneWay = true)]
void Register(RegistrationMessage message);
}
Run Code Online (Sandbox Code Playgroud)
WCF主机的app.config
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetaDataBehaviour">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netMsmqBinding>
<binding name="msmq"
deadLetterQueue="System" durable="true"
exactlyOnce="false"
receiveContextEnabled="false"
useMsmqTracing="true">
<security mode="None" />
</binding>
</netMsmqBinding>
</bindings>
<services>
<service behaviorConfiguration="MetaDataBehaviour" name="Client.AuthenticationService.RegistrationService">
<endpoint address="net.msmq://localhost/private/AuthenticationQueue"
binding="netMsmqBinding"
bindingConfiguration="msmq" name="msmq"
contract="Global.DomainModel.IRegistration" />
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/Registration/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我不知道WCF,但我可以对MSMQ方面发表评论.
"我已经验证了WCF服务正确生成了消息,我还可以看到消息在我发送给的队列的日志中,但不在我期望的实际排队消息区域中."
这意味着邮件已传递和处理.
与队列关联的日志消息仅在消息已传递然后由应用程序读取/接收时创建.
如果消息刚刚传递但未读取/接收,则不会创建日志消息,并且原始消息将保留在目标队列中.
如果邮件已发送但随后被清除/删除,则不会创建日记邮件,因为应用程序未成功读取/接收原始邮件.
干杯
约翰休斯威尔
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |