0

我正在尝试创建一个客户端,通过 WCF 将消息放入服务器上的队列中。结合使用各种网站、论坛帖子等,我编写了利用下面的 App.config 的代码。

当我执行检索 CryptoCoordinatorQueueName 的简单操作时,我得到一个异常。如果我注释掉 system.serviceModel 和 bindings 部分,异常就会消失并正确返回字符串。异常是“Configuration system failed to initialize”,向下挖掘我看到内部异常“Unrecognized element”和标签对应的行号。System.ServiceModel 被项目引用,但看起来这不足以使配置系统接受该元素。谁能看到如何解决这个问题?我正在使用 dotnet 4 和 VS2010。

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

      <configSections>
        <sectionGroup name="applicationSettings" 
                      type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="CryptoCoordinatorServiceTest.Properties.Settings" 
                   type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>

      <appSettings>
        <add key="CryptoCoordinatorQueueName" value=".\private$\CryptoCoordinatorQueue" />
      </appSettings>

      <system.serviceModel>
          <services>
              <service behaviorConfiguration="MetadataBehavior" name="CryptoCoordinatorService.CryptoCoordinatorQueue">
                  <endpoint
                    address="net.msmq://localhost/private/CryptoCoordinatorQueue"
                    binding="netMsmqBinding"
                    contract="CryptoCoordinatorService.ICryptoCoordinatorControlQueue"
                    bindingConfiguration="CryptoCoordinatorNetMsmqBinding"/>
                  <endpoint
                    address="mex"
                    binding="mexHttpBinding"
                    contract="IMetadataExchange"/>
                  <host>
                      <baseAddresses>
                          <add baseAddress="http://localhost:8080/CryptoCoordinatorQueue/"/>
               
                    </baseAddresses>
           
                  </host>
                </service>
     
          </services>
      </system.serviceModel>

      <bindings>
          <netMsmqBinding>
              <binding name="CryptoCoordinatorNetMsmqBinding" deadLetterQueue="Custom">
                  <security mode="None"/>
                </binding>
     
          </netMsmqBinding>

      </bindings>



    </configuration>
4

2 回答 2

1

啊。我尝试使用十六进制编辑器查看 app.config 文件,发现一些空格包含 0xA0 字符以及预期的 0x20。在网页、OneNote 和 Visual Studio 之间复制和粘贴片段的某个地方,出现了奇怪的错误。

将文件粘贴到在线清洁器(在本例中为http://www.ubertoolz.com/demo/CleanUp.php)并将其粘贴回来解决了问题。将其粘贴到记事本中并没有删除垃圾。格式搞砸了,因为它也去掉了制表符,但这是一个小小的刺激。

于 2012-10-03T14:48:38.830 回答
0

移动您的 bindings 元素,使其成为 system.serviceModel 的子元素:

<system.serviceModel>
    <bindings>
        ...
    </bindings>
</system.serviceModel>
于 2012-10-01T17:59:18.447 回答