小编Jef*_*ock的帖子

System.IO.Exception:管道已损坏

我有两个.NET应用程序通过命名管道相互通信.第一次通过时一切都很好,但是在发送第一条消息之后,服务器将再次监听,该WaitForConnection()方法抛出一条System.IO.Exception消息管道已损坏.
为什么我在这里得到这个例外?这是我第一次使用管道,但类似的模式在过去使用套接字对我有用.

代码啊!
服务器:

using System.IO.Pipes;

static void main()
{
    var pipe = new NamedPipeServerStream("pipename", PipeDirection.In);
    while (true)
    {
        pipe.Listen();
        string str = new StreamReader(pipe).ReadToEnd();
        Console.Write("{0}", str);
    }
}
Run Code Online (Sandbox Code Playgroud)

客户:

public void sendDownPipe(string str)
{
    using (var pipe = new NamedPipeClientStream(".", "pipename", PipeDirection.Out))
    {
        using (var stream = new StreamWriter(pipe))
        {
            stream.Write(str);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对sendDownPipe的第一次调用让服务器打印我发送的消息就好了,但是当它再循环回来再次监听时,它就会大便.

c# named-pipes .net-3.5

21
推荐指数
2
解决办法
3万
查看次数

ASP.NET MVC中的LinkBut​​ton

我需要将一些ASP LinkBut​​tons实例化到ASP.NET MVC视图页面上.我尝试了一些东西,但我不能让它们出来.这是我最近的代码化身:aspx文件

<body>
<% using (Html.BeginForm("TitleDetail", "Movies", FormMethod.Post, new{runat="server"})) { %> 

    <ul>
    <% foreach (var disc in Model.Title.tblDiscs) %>
    <% { %>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>
    <% } %>
    </ul>
<% } %> 
</body>
Run Code Online (Sandbox Code Playgroud)

它在Firefox中呈现的是我正在枚举的集合中每个成员的文本链接的一个实例,但它们不是超链接,只是文本.生成的HTML看起来像这样

<form action="/MyMovies/TitleDetail/239" method="post" runat="server">test title <br />

   <ul>
        <li>

            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>
        </li>

        <li>
            <asp:LinkButton ID="Play">Link</asp:LinkButton>

        </li>

    </ul>
Run Code Online (Sandbox Code Playgroud)

我尝试在每个asp:LinkBut​​ton标记中添加一个runat ="server"属性,但我得到一个运行时异常,控件只能放在带有runat ="server"属性的表单标记内.我认为我已经做过了,所以我真的不明白.任何人都可以向我解释我做错了什么,以及我需要做些什么来修复它以便LinkBut​​tons实际上是链接的?

asp.net-mvc webforms asplinkbutton runatserver

10
推荐指数
2
解决办法
1万
查看次数

如何确定机器暂停的原因?

我希望能够以编程方式确定Vista系统退出待机状态的原因(S3).任何语言都可以,但.NET最好.我希望将此代码放入我正在处理的应用程序中.

我正在寻找诸如"媒体中心想要录制节目","用户输入唤醒机器","Windows更新计划运行"等原因.我搜索了Google,Bing和MSDN,但我只能找到与Windows Mobile相关的内容.

有人能指出我可以提供这些信息的功能或对象吗?

power-management windows-vista standby

5
推荐指数
1
解决办法
89
查看次数

我可以在运行时将.NET方法调用重定向到新方法吗?

假设我有以下.NET类:

public class C
{
    public void M()
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

public class D
{
    public void N()
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个类位于不同的程序集中的不同名称空间中.有没有办法让所有调用C.M()自动"重定向" D.N()?因此,调用方法就是调用它C.M,但实际上,D.N它实际上是被调用的,具有任何可能的参数C.M.如果这种情况发生在类的所有实例化中,或仅针对一个特定对象,则无关紧要.

MS Research的Detours库可以为正常的Win32 DLL导出做一些非常类似的事情.我正在寻找一种方法来使用.NET方法.

.net hook detours

4
推荐指数
1
解决办法
4963
查看次数

双向命名管道问题

我有两个应用程序,我想通过.NET 3.5上的命名管道进行通信.它是一个请求/响应范例,数据以XML格式传输,使我的生活更轻松.有一个监听器应用程序,以及一个将请求发布到管道的应用程序.我正在尝试使用双向管道来做到这一点.我遇到的问题是对StreamReader.ReadToEnd()的调用似乎没有返回.我该怎么做才能解决这个问题?

听众代码

public Class Listener
{
    private void ThreadFunc()
    {
       var pipe = new NamedPipeServerStream("GuideSrv.Pipe",PipeDirection.InOut);
       var instream = new StreamReader(pipe);
       var outstream = new StreamWriter(pipe);
       while (true)
       {
           pipe.WaitForConnection();
           var response = ProcessPipeRequest(instream);
           outstream.Write(response.ToString());
           pipe.Disconnect();
       }
    }
    private XDocument ProcessPipeRequest(StreamReader stream)
    {
        var msg_in = stream.ReadToEnd();  // << This call doesnt return
        var xml_in = XDocument.Parse(msg_in);
        // do some stuff here 
        return new XDocument(....);
    }  
}
Run Code Online (Sandbox Code Playgroud)

请求者代码

public XDocument doIt()
{
    var xml = new XDocument(....);
    using (var pipe …
Run Code Online (Sandbox Code Playgroud)

.net bidirectional named-pipes .net-3.5

2
推荐指数
1
解决办法
4110
查看次数