命名管道上的WCF在.NET4中引发异常,在3.5中工作

命名管道上的WCF在.NET4中引发异常,在3.5中工作,wcf,.net-4.0,.net-3.5,named-pipes,Wcf,.net 4.0,.net 3.5,Named Pipes,我试图在上运行这个源于此博客条目的示例 如果在.NET4中运行服务器代码,它会引发以下异常: First-chance exception at 0x754cd36f (KernelBase.dll) in TestConsole.exe: 0xE0564552: 0xe0564552. 如果我在.NET3.5中运行服务器代码,它就可以正常工作。在这两个测试中,客户机代码都是根据.NET4编译的。我的服务器代码如下: [ServiceContract] public interface ISt

我试图在上运行这个源于此博客条目的示例

如果在.NET4中运行服务器代码,它会引发以下异常:

First-chance exception at 0x754cd36f (KernelBase.dll) in TestConsole.exe: 0xE0564552: 0xe0564552.
如果我在.NET3.5中运行服务器代码,它就可以正常工作。在这两个测试中,客户机代码都是根据.NET4编译的。我的服务器代码如下:

[ServiceContract]
public interface IStringReverser
{
    [OperationContract]
    string ReverseString(string value);
}

public class StringReverser : IStringReverser
{
    public string ReverseString(string value)
    {
        char[] retVal = value.ToCharArray();
        int idx = 0;
        for (int i = value.Length - 1; i >= 0; i--)
            retVal[idx++] = value[i];

        return new string(retVal);
    }
}

class Program
{
    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(StringReverser), new Uri[] { new Uri("net.pipe://localhost") }))
        {
            host.AddServiceEndpoint(typeof(IStringReverser), new NetNamedPipeBinding(), "PipeReverse");
            host.Open();

            Console.WriteLine("Service is available. Press <ENTER> to exit.");
            Console.ReadLine();

            host.Close();
        }
    }
}
[ServiceContract]
public interface IStringReverser
{
    [OperationContract]
    string ReverseString(string value);
}

class Program
{
    static void Main(string[] args)
    {
        ChannelFactory<IStringReverser> pipeFactory =
          new ChannelFactory<IStringReverser>(
            new NetNamedPipeBinding(),
            new EndpointAddress(
              "net.pipe://localhost/PipeReverse"));

        IStringReverser pipeProxy = pipeFactory.CreateChannel();

        while (true)
        {
            string str = Console.ReadLine();
            Console.WriteLine("pipe: " +
              pipeProxy.ReverseString(str));
        }
    }
}
[服务合同]
公共接口IStringReverser
{
[经营合同]
字符串反向限制(字符串值);
}
公共类StringReverser:IStringReverser
{
公共字符串反向限制(字符串值)
{
char[]retVal=value.ToCharArray();
int-idx=0;
对于(int i=value.Length-1;i>=0;i--)
retVal[idx++]=值[i];
返回新字符串(retVal);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
使用(ServiceHost主机=新ServiceHost(typeof(StringReverser)),新Uri[]{new Uri(“net”)。pipe://localhost") }))
{
AddServiceEndpoint(typeof(IStringReverser),新的NetNamedPipeBinding(),“PipeReverse”);
host.Open();
控制台。WriteLine(“服务可用。按退出”);
Console.ReadLine();
host.Close();
}
}
}
我的客户代码如下:

[ServiceContract]
public interface IStringReverser
{
    [OperationContract]
    string ReverseString(string value);
}

public class StringReverser : IStringReverser
{
    public string ReverseString(string value)
    {
        char[] retVal = value.ToCharArray();
        int idx = 0;
        for (int i = value.Length - 1; i >= 0; i--)
            retVal[idx++] = value[i];

        return new string(retVal);
    }
}

class Program
{
    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(StringReverser), new Uri[] { new Uri("net.pipe://localhost") }))
        {
            host.AddServiceEndpoint(typeof(IStringReverser), new NetNamedPipeBinding(), "PipeReverse");
            host.Open();

            Console.WriteLine("Service is available. Press <ENTER> to exit.");
            Console.ReadLine();

            host.Close();
        }
    }
}
[ServiceContract]
public interface IStringReverser
{
    [OperationContract]
    string ReverseString(string value);
}

class Program
{
    static void Main(string[] args)
    {
        ChannelFactory<IStringReverser> pipeFactory =
          new ChannelFactory<IStringReverser>(
            new NetNamedPipeBinding(),
            new EndpointAddress(
              "net.pipe://localhost/PipeReverse"));

        IStringReverser pipeProxy = pipeFactory.CreateChannel();

        while (true)
        {
            string str = Console.ReadLine();
            Console.WriteLine("pipe: " +
              pipeProxy.ReverseString(str));
        }
    }
}
[服务合同]
公共接口IStringReverser
{
[经营合同]
字符串反向限制(字符串值);
}
班级计划
{
静态void Main(字符串[]参数)
{
管道工厂=
新渠道工厂(
新建NetNamedPipeBinding(),
新端点地址(
“净。pipe://localhost/PipeReverse"));
IStringReverser pipeProxy=pipeFactory.CreateChannel();
while(true)
{
string str=Console.ReadLine();
Console.WriteLine(“管道:”+
反向限制(str);
}
}
}
这究竟是为什么在.NET4上出现故障?这似乎是一个很基本的例子。我确实在每次跑步之间做了一次清洁/构建。以下是实际stacktrace的快照:

>P>,结果显示在VisualStudio中,在调试中有“抛出”->异常-> C++异常。如果我不抛出异常,但让它被处理,那么一切都会正常工作

> P>在VisualStudio中,我在调试中有了“抛出”->异常-> C++异常。如果我不抛出异常,但让它被处理,那么一切都会正常工作