2 zhongxue dai zhongxue_dai 于 2016.02.13 22:02 提问

C# WCF 消息队列报错,求救 5C

win10系统,添加完消息队列组件之后,写了个控制台的WCF MSMQ小例子。
运行服务端总是报错,试过网上能查到的配置文件还有代码的方式修改了,还是报那个错误。

“System.InvalidOperationException”类型的未经处理的异常在 System.ServiceModel.dll 中发生

其他信息: 打开队列时出错。确保已安装和运行 MSMQ,队列存在并且具有正确的读取权限。内部异常可能包含更多信息。

请问有么没人给点思路处理一下这个问题?

图片说明

契约接口

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfServiceLibrary1
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
    [ServiceContract]
    public interface IService1
    {
        [OperationContract(IsOneWay=true)]
        void writeFile(string content);
    }
}

契约实现类

 namespace WcfServiceLibrary1
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
    public class Service1 : IService1
    {
        [OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)]
        public void writeFile(string content)
        {
            // 实现写文件的功能
            StreamWriter sw = new StreamWriter("c:\\wcfMSMQ.txt", true);
            sw.Write(content);
            sw.WriteLine();
            sw.Close();
        }
    }
}

服务端控制台代码

             // 创建队列
            string queueName = @".\private$\myQueue";     // 看命名格式,私有的就是专用的

            // 如果队列不存在,则创建
            if (!MessageQueue.Exists(queueName))
            {
                MessageQueue.Create(queueName, true);  // 创建事务性的队列
            }
            // host服务
            ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
            if (host.State != CommunicationState.Opened)
            {
                host.Open();
            }
            Console.WriteLine("服务已启动!");
            Console.ReadLine();
        }

服务端APP.config代码

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- 部署服务库项目时,必须将配置文件的内容添加到
 主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 -->
  <system.serviceModel>
    <bindings>
      <netMsmqBinding>
        <binding name="binding1">
          <security>            
            <transport msmqAuthenticationMode="None" msmqProtectionLevel="None"/>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </netMsmqBinding>
    </bindings>
    <services>
      <service name="WcfServiceLibrary1.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://127.0.0.1:3300/msmq" />
            <add baseAddress="net.msmq://127.0.0.1/private/myQueue"/>
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
        <endpoint address="" binding="netMsmqBinding" bindingConfiguration="binding1" contract="WcfServiceLibrary1.IService1">
          <!-- 
              部署时,应删除或替换下列标识元素,以反映
             用来运行所部署服务的标识。删除之后,WCF 将
              自动推断相应标识。
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 --> 
        <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除 -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,
          请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- 要接收故障异常详细信息以进行调试,
          请将以下值设置为 true。在部署前设置为 false 
          以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

1个回答

caozhy
caozhy   Ds   Rxr 2016.02.13 22:08

贴出你的代码看看,你的队列名是否正确,你系统中msmq配置是否正确。

zhongxue_dai
zhongxue_dai 额,刚贴了代码,麻烦帮忙看一下,谢谢!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
(6)WCF服务离线操作与消息队列MSMQ
WCF分布式开发必备知识(1):MSMQ消息队列 , 当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的基础文章。在那篇文章里,我们详细介绍了MSMQ消息队列的基本概念、安装、部署、开发、调试等相关问题。今天我们来学习WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ。在WCF框架下使用MSMQ消息队列服务编程。  这里我会给出一个使用WCF MSMQ实现离线请求的D
消息队列+WCF项目实现完整版
消息队列+WCF项目实现完整版,消息队列+WCF项目实现完整版
MSMQ消息队列与WCF MSMQ的认识与使用
先说一下MSMQ MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;
简单的WCF发布-订阅(Pub/Sub)服务
简单的WCF发布-订阅(Pub/Sub)服务    发布-订阅服务架构是分布式系统中常见的服务架构。本文将通过一个简单的例子介绍WCF中发布-订阅服务的实现,以及一些相关概念的介绍。    WCF支持回调操作,所谓回调就是服务端调用客户端的操作。如下图所示,在回调时:服务成为客户端,客户端成为服务。        本文要实现的例子是这样的:客户端(订阅者)向服务(发布者)提出订阅请
wcf返回datatable必须给tablename赋值
From: http://www.cnblogs.com/hxw/archive/2010/07/10/1774841.html 最近在学习WCF,返回datatable的时候老是出现“An error occurred while receiving the HTTP response to http://localhost:9999/calculatorservice. Th
WCF中如何修改MaxItemsInObjectGraph的限制
在WCF/WebService中,如果返回值过大,比如Array,List,DataSet等达到一定数量级的话,可能引发下面的异常:WebService代码[WebService(Namespace = "http://tempuri.org/")] [WebServiceBin
wcf消息队列
wcf消息队列
c#中如何操作消息队列
“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。   消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。   c#中发往消息队
Winform客户端引用WCF客户端后,部分类无法正常使用
在项目中用到WCF,项目的结构是这样的: 在SPI项目中编写该解决方案中公共的类及函数; 在WCFService项目中写的是svc文件及WCF服务接口; 在Client中添加WCF服务引用的时候该WCFService项目,然后再UI项目中初始化Client的实例。通过该实例WCFService中的方法。 问题: 有时会出现这么一种情况,在UI中通过初始化Client的实例。通过该实例WCFSer
C# Redis消息队列例子
备注:Redis驱动版本:4.0.50.0class Program { //版本2:使用Redis的客户端管理器(对象池) public static IRedisClientsManager redisClientManager = new PooledRedisClientManager(new string[] { //如果是