小编And*_*bel的帖子

.NET阻塞套接字读取直到X字节可用?

假设我在TCP上实现了简单的协议,其中每条消息由以下内容组成:

  1. 一个int指示数据长度.
  2. 二进制数据,长度为1.

阅读这样的消息,我想要像:

int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
Run Code Online (Sandbox Code Playgroud)

使用Socket.ReceiveNetworkStream.Read读取可用的字节数.我希望调用ReadBytes阻塞,直到length字节可用.

是否有一种简单的方法可以执行此操作,而无需循环读取,在等待剩余数据的偏移处重新启动?

在一个真正的应用程序中,读取应该可以在异步或后台线程上完成,但我暂时忽略了它.重要的是能够在所有数据都可用之前读取不完整.

编辑

我知道我可以自己缓冲数据,我知道如何做到这一点.它只是一个循环Receive,在下一个偏移处继续.我要求的是,如果有一个可重用的实现这样的循环,而不需要任何类型的自有循环(或者可重用的Async实现,当所有数据都可用时完成).

.net c# sockets networkstream

3
推荐指数
1
解决办法
3489
查看次数

用于合并多个 .SQL 文件的工具

现在我们有一个约 5000 行的 .sql 文件,其中包含表、函数、触发器和其他定义/声明。这个想法是将其分割成多个sql文件,以防止同一文件被多人同时编辑。然后,在构建时间之前,这些文件将被合并回一个临时文件,然后我们的脚本将在其中导入并创建数据库。

我最初的想法是创建一个 bash 脚本并以适当的顺序连接文件以重建大约 5000 行的 .sql 文件,然后可以导入该文件。我很好奇是否有某种类型的 mysql、psql 或其他 Linux 特定命令能够以更优雅和更干净的方式执行此操作?

mysql sql unix

3
推荐指数
1
解决办法
3066
查看次数

WCF双工通信

WCF中是否可以进行双工通信?

wcf

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

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

信箱不可用.服务器响应为:5.4.1拒绝中继访问

当我尝试使用C#代码发送邮件时,我收到"邮箱不可用.服务器响应是:5.4.1无法中继myemail@mydomain.com".

然后我在这里测试了我的smtp服务器.

这时我输入我的smtp服务器,发件人和收件人的名字.我收到了以下信息:

邮件来自:mymail@mydomain.com

SMTP - > FROM SERVER:

250 2.1.0发件人确定

RCPT TO:anothermail@mydomain.com

SMTP - > FROM SERVER:

550 5.4.1拒绝中继接入

SMTP - >错误:服务器不接受RCPT:550 5.4.1拒绝中继访问

消息发送失败.

c# asp.net asp.net-mvc smtp

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

将常量值传递给函数

我试图将float32_t*const值传递给函数参数,我收到异常错误.我尝试过很多东西但仍然收到错误.我的功能是:

float32_t Distance(float32_t *const argDistance);
Run Code Online (Sandbox Code Playgroud)

其中float32_t是:typedef float float32_t;

我试图像这样访问这个函数:

float32_t* const tempTipDistance = 0;
Run Code Online (Sandbox Code Playgroud)

但它往往会抛出异常:

SEH exception with code 0xc0000005 thrown in the test body.
Run Code Online (Sandbox Code Playgroud)

有关如何将值传递给此函数的任何建议?

c floating-point pointers const parameter-passing

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

如何版本WCF服务

有没有一种很好的方法来版本化WCF服务中的数据类型和方法?

这样的东西在1.0版到4.5版中包含一个方法会很不错.

[ServiceContract()]
interface ITradeTrackingService
{
    [OperationContract()]
    [Version(1.0, 4.5)]
    void PublishQuote(Quote quote);
}
Run Code Online (Sandbox Code Playgroud)

在数据类型上有类似的东西.

然后我想在我的网址中这样做:

server.com/ws/2.3/
Run Code Online (Sandbox Code Playgroud)

然后在我的Global.asax BeginRequest中执行以下操作:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    Service.Version = someParsingOfUrl(); // return 2.3;
}
Run Code Online (Sandbox Code Playgroud)

然后公开了正确的方法,并公开了数据类型中的正确值.

这只是我的梦想还是可以通过某种方式完成?

versioning wcf

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

C#将调试输出写入.txt文件

我正在运行代码,我希望我的调试输出写入文本文件.这是如何运作的?我试着写:

TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
            new TextWriterTraceListener("W:\\C.txt"),
          new TextWriterTraceListener(Console.Out)};
Debug.Listeners.AddRange(listeners);
Debug.WriteLine("Some Value", "Some Category");
Run Code Online (Sandbox Code Playgroud)

但它仍然写入输出窗口......我该怎么办?谢谢.

c#

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

如何识别丢失的 ConfigurationElement?

使用System.Configuration,如何确定子配置元素是完全丢失还是空的?

测试程序

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MissingConfigElementTest
{
    class MyConfigurationElement : ConfigurationElement
    {
        [ConfigurationProperty("name")]
        public string Name
        {
            get { return (string)base["name"]; }
        }
    }

    class MyConfigurationSection : ConfigurationSection
    {
        [ConfigurationProperty("empty", DefaultValue = null)]
        public MyConfigurationElement Empty
        {
            get { return (MyConfigurationElement)base["empty"]; }
        }

        [ConfigurationProperty("missing", DefaultValue = null)]
        public MyConfigurationElement Missing
        {
            get { return (MyConfigurationElement)base["missing"]; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var configSection …
Run Code Online (Sandbox Code Playgroud)

.net c# configuration configurationmanager

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

在Kentor Auth Services中找不到实体ID为"http://stubidp.kentor.se/Metadata"的Idp

我们要求启用SAML SSO登录我的应用程序.我的应用程序是Angular JS + Asp.Net Web API解决方案.我的应用程序已经使用Owin Bearer Authentication作为授权模型.

启用S​​aml SSO我正在尝试使用Kentor Auth服务.但是,当Idp称我的webapi时,我正面临着一个问题.kentor服务抛出给定的密​​钥在字典中不存在.错误.我使用http://stubidp.kentor.se/来测试实现.下面是我在启动课程中的Saml配置

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            ConfigureOAuth(app);

            var config = new HttpConfiguration();
            WebApiConfig.Register(config);
            app.UseWebApi(config);

            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configuration.MessageHandlers.Add(new CachingHandler(GlobalConfiguration.Configuration));
        }
        public void ConfigureOAuth(IAppBuilder app)
        {
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            var oAuthServerOptions = new OAuthAuthorizationServerOptions
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/Auth/token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                Provider = new JobPulseAuthorizationServerProvider()
            };
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new …
Run Code Online (Sandbox Code Playgroud)

c# owin kentor-authservices

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