小编Jel*_*rik的帖子

WCF自主服务,安装程序类和netsh

我有一个自我托管的WCF服务应用程序,我想通过msi安装程序包进行部署.端点使用http端口8888.为了在安装后在Windows 2008下启动项目,我必须以管理员身份运行程序或者必须使用netsh编辑http设置:

"netsh http add urlacl url=http://+:8888/ user=\Everyone"
Run Code Online (Sandbox Code Playgroud)

我想从我的安装程序类编辑http设置.因此,我从Install()方法调用以下方法:

    public void ModifyHttpSettings()
    {
        string parameter = @"http add urlacl url=http://+:8888/ user=\Everyone";

        System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", parameter);

        psi.Verb = "runas";
        psi.RedirectStandardOutput = false;
        psi.CreateNoWindow = true;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        psi.UseShellExecute = false;
        System.Diagnostics.Process.Start(psi);
    }
Run Code Online (Sandbox Code Playgroud)

此方法适用于英语版本的Windows,但不适用于本地化版本(该组每个人在本地化版本中都有不同的名称).我还尝试使用Environment.UserName来允许至少为当前登录用户访问.但这也行不通,因为安装程序类由在用户SYSTEM下运行的msi服务运行.因此Enviroment.UserName返回SYSTEM,这不是我想要的.

有没有办法从msi安装程序类授予对我的自主WCF服务的所有(或至少是当前登录的)用户的访问权限?

wcf windows-installer netsh

14
推荐指数
1
解决办法
8784
查看次数

在asp.net web api中支持@ odata.bind(在帖子期间链接到现有实体)

我很难从WCF数据服务迁移到web api odata v4.我坚持以下问题:

odata web api似乎不支持@ odata.bind.

我找到了以下链接:https: //github.com/OData/WebApi/issues/158 有人建议实现自己的ODataEntityDeserializer派生类,如下所示:

public class ExtendedODataEntityDeserializer : ODataEntityDeserializer
{
    public ExtendedODataEntityDeserializer(ODataDeserializerProvider deserializerProvider) : base(deserializerProvider)
    {
    }

    public override void ApplyNavigationProperty(
        object entityResource, 
        ODataNavigationLinkWithItems navigationLinkWrapper, 
        IEdmEntityTypeReference entityType, 
        ODataDeserializerContext readContext)
    {
        base.ApplyNavigationProperty(entityResource, navigationLinkWrapper, entityType, readContext);

        foreach (var childItem in navigationLinkWrapper.NestedItems)
        {
            var entityReferenceLink = childItem as ODataEntityReferenceLinkBase;

            if (entityReferenceLink != null)
            {
                var navigationPropertyName = navigationLinkWrapper.NavigationLink.Name;
                Uri referencedEntityUrl = entityReferenceLink.EntityReferenceLink.Url;

                if (!referencedEntityUrl.IsAbsoluteUri)
                {
                    referencedEntityUrl = new Uri(readContext.Request.RequestUri, referencedEntityUrl);
                }

                var …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api-odata

9
推荐指数
1
解决办法
1260
查看次数

如何将路由绑定到asp.net-core / Kestrel中的特定端口

在asp.net Web API中,可以将具有特定端口的路由映射到控制器,如下所示:

public void Run1()
{
    HttpConfiguration config = new HttpConfiguration();
    ...
    config.Routes.MapHttpRoute(
       name: "Controller1",
       routeTemplate: "{action}",
       defaults: new { controller = "Controller1" }
    );

    Microsoft.Owin.Hosting.WebApp.Start("http://localhost:9000/base1/", config);
}

public void Run2()
{
    HttpConfiguration config = new HttpConfiguration();
    ...
    config.Routes.MapHttpRoute(
       name: "Controller2",
       routeTemplate: "{action}",
       defaults: new { controller = "Controller3" }
    );

    Microsoft.Owin.Hosting.WebApp.Start("http://localhost:9000/base2/", config);
}

public void Run3()
{
    HttpConfiguration config = new HttpConfiguration();
    ...
    config.Routes.MapHttpRoute(
       name: "Controller3",
       routeTemplate: "{action}",
       defaults: new { controller = "Controller3" }
    );

    Microsoft.Owin.Hosting.WebApp.Start("http://localhost:9050/base3/", config); …
Run Code Online (Sandbox Code Playgroud)

kestrel-http-server asp.net-core

7
推荐指数
0
解决办法
681
查看次数

Ajax:HTTP Basic Auth和身份验证cookie

我想将HTTP基本身份验证标题存储在身份验证cookie中,这样我就不必在后续请求中处理授权头(我正在使用jQuery):

authenticate: function(auth) {
    var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
    document.cookie = "Authorization: " + header;
    $.ajax({
        type: "GET",
        url: "http://someurl",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: auth.success,
        error: auth.error
    });
},
Run Code Online (Sandbox Code Playgroud)

虽然这似乎适用于第一个登录的用户,但它对浏览器会话中的任何其他用户都不起作用,因为后续的授权标头已添加但未被覆盖.我知道可以使用name=value语法覆盖cookie ,但此语法不适用于授权标头.

一旦新用户登录,有没有办法摆脱旧的授权标头?

任何帮助,将不胜感激.谢谢,JeHo

javascript basic-authentication

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

WebApi odata:将长序列化为字符串

我正在从 WCF 数据服务迁移到 Web API odata v4。WCF 数据服务确实在引号中序列化了长值:

{
   "value":[{
     "ID":"4527895973896126465"
   },{
     "ID":"4527895973896126466"
   }]
}
Run Code Online (Sandbox Code Playgroud)

Web API odata 不会:

{
   "value":[{
     "ID":4527895973896126465
   },{
     "ID":4527895973896126466
   }]
}
Run Code Online (Sandbox Code Playgroud)

这意味着我在 JavaScript 中的 JSON.parse 期间失去了 64 位数字的精度,因为 JavaScript 数字只有 53 位。

WebApi 是否具有将长值作为字符串值处理的内置机制?我在考虑IEEE754Compatible标头元素。但这对生成的响应没有影响。我是否忽略了什么?

另一种解决方案是在客户端的 JSON.parse 期间将 64 位数字反序列化为字符串值。这可能吗?

javascript wcf-data-services odata asp.net-web-api

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

SQL脚本/表分区

是否有一种简单的方法可以在SQL脚本中确定ORACLE表分区功能是否可用?

如果功能可用,我想创建一些表作为分区表,否则应该正常创建表.我有一个带有我的DDL的脚本,我用它通过sqlplus设置数据库.

谢谢.

JeHo

oracle

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