我有一个自我托管的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数据服务迁移到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) 在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) 我想将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
我正在从 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 位数字反序列化为字符串值。这可能吗?
是否有一种简单的方法可以在SQL脚本中确定ORACLE表分区功能是否可用?
如果功能可用,我想创建一些表作为分区表,否则应该正常创建表.我有一个带有我的DDL的脚本,我用它通过sqlplus设置数据库.
谢谢.
JeHo