小编Rub*_*aus的帖子

WCF代理和userPrincipalName

我和我正在开发的团队有一个相当大的应用程序,它包含许多基于WCF NetTCP的服务.此系统将在其下运行的Windows服务不是本地帐户,而是标准域用户(在托管服务的服务器上具有管理员权限).在测试连接的过程中,我遇到了SSPI调用失败的问题.基于几个小时的研究,这导致我失去了我的客户端配置中的以下行:

<identity>
     <userPrincipalName value="MACHINE\user" />
</identity>
Run Code Online (Sandbox Code Playgroud)

使用它的问题是我不使用VS或svcutil为此服务生成客户端/代理 - 正在使用的代理完全用代码编写,并且它们继承System.ServiceModel.ClientBase.我认为选择此选项的原因是我们可以使用完全相同的DataMember对象,这些对象通过栅栏两侧的服务 - 第三方组不需要连接到我们的服务,所以这不是问题.

当我没有在标准system.serviceModel配置部分中指定端点时,有没有人知道我在客户端(代码或通过配置)中设置userPrincipalName的方法?

以下是我的客户端web.config的参考资料:

    <system.serviceModel>
    <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="true"
         logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <behaviors>
        <serviceBehaviors>
            <behavior name="includeExceptions">
                <serviceDebug includeExceptionDetailInFaults="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <netTcpBinding>
            <binding name="NetTcpBinding_Default" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="Infinite" sendTimeout="01:00:00" portSharingEnabled="true" transferMode="Buffered" maxReceivedMessageSize="2147483647">
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                <security mode="Transport">
                    <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
                </security>
            </binding>
        </netTcpBinding>
    </bindings>

</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

wcf identity wcf-security

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

登录用户

我公司有一个很大的应用程序,我们正在完成.它利用WCF作为Active Directory的骨干进行身份验证.这适用于两个站点之一,因为身份验证模型是Windows,您必须成为域的一部分才能登录该站点.我的问题涉及外部可访问的其他站点.它为具有特定用户/传递的代理调用设置ClientCredentials.Windows.ClientCredential以模拟AD用户,因此完整的安全模型可以正常工作.这一切都完全符合预期.

我的问题是,在网上我可以使用HttpContext.Current.User.Identity.Name从Forms身份验证部分获取当前登录的用户,但要做到这一点,我必须确保存在一个System.Web引用我目前正在使用的DLL.我们的基础对象来自一个不了解System.Web的简单类.有没有办法找出在该基础对象项目中登录的Forms用户?我尝试过System.Security.Principal,但这只能让我从我能说的内容中访问Windows帐户,并且不会对我有任何帮助.

我知道一个选项只是引用System.Web并完成它,但这听起来真的很麻烦,而不是最好的选择,所以我希望在这里提供一些技巧.

c# security wcf forms-authentication

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

果园 - 移动页面标题

我是新的,以果园,现在还在试图总结我的脑袋周围所有的不同的术语,以便用断章取义这里什么也不是故意.我正在尝试做类似于此处发布的内容,但没有接受的答案.

在常规站点(非博客)中,我的客户端的图形组提供的布局有一个标题部分,然后是它下面的两列.所以,像这样:

============================================================
|  Page Title                                              |
============================================================
| Left Content                           | Right Content   |
|                                        |                 |
============================================================
Run Code Online (Sandbox Code Playgroud)

标题区域的HTML是:

<div class="page_header">
  <div class="padding">
    <h2 id="page_title">This is the page's title</h2>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在该块下面是更多的div,将页面的其余部分分成两列.我遇到的问题是尝试获取用户通过Orchard输入的页面标题,以显示在上面提到的部分中.我尝试将它设为一个名为PageTitle的区域,但最接近我显示的是当我为该占位符添加一个空的HTML小部件时,然后在标签中执行了@ Model.PageTitle,i.ie:

<div class="page_header">
  <div class="padding">
    <h2 id="page_title">@Model.PageTitle</h2>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这得到格式正确,但标题显示为"ISHAPEPROXYD0FC462A536A4DA88FD49545639B4698",我猜测是某种类型的默认ToString()实现.如果我以区域格式包装@ Model.PageTitle,即@Zone(Model.PageTitle),则不会再显示任何内容.我尝试过的其他属性是:@ Model.Title和@ Model.TitlePart.Title.

我也尝试过使用placement.info文件,但似乎希望PageTitle区域中的内容显示任何与我需要的内容不相符的内容.我通过以下内容证实了这一点:

<Place Parts_Title="Content:after" />
Run Code Online (Sandbox Code Playgroud)

该行(使用之前或之后)使标题显示,而不是在正确的位置.当我使用下面的内容时,没有任何显示(使用之前,之后,没有值,1等):

<Place Parts_Title="PageTitle:before" />
Run Code Online (Sandbox Code Playgroud)

因此,总结一下,如何让内容的标题显示在没有其他用户启动的内容显示的特定区域?

c# asp.net-mvc orchardcms

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

IISExpress 是单线程的吗?

我正在编写一个自定义的 .Net 应用程序,该应用程序利用 Claims 来确保安全性,因为我们跨越了许多边界 - Web、API、批处理等等。在开发过程中,有时我会在通过 Chrome 登录时在系统中创建一些东西,然后我将通过 Edge 中的不同帐户测试新创建的项目,并以某种方式HttpContext.Current.User.Identity对应于我的 Chrome 会话。我确实Thread.CurrentPrincipal在幕后设置,但我的理解一直是所有进入 IIS 的请求都会产生一个新线程,所以我无法弄清楚为什么 Edge 请求被处理为好像它们是 Chrome 请求一样。

是否有可能因为 Visual Studio 处于调试模式而共享此信息?

c# asp.net httpcontext claims-based-identity

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

ElasticSearch (NEST) 按编号搜索

如果这是一个基本问题,我提前道歉 - 我对 ElasticSearch 非常陌生,需要了解很多。

现在,我正在尝试实现一个基本的关键字搜索来搜索所有索引列,并且我得到了一些带有特定字段的奇怪结果,Year. 我有一定数量的文件,我知道应该从结果中返回,如果我搜索“2014”,它们都会成功返回。如果我只搜索“14”,什么都不会返回,如果我添加了一个通配符(例如*14),那么我会得到一个结果,因为它没有Year在搜索中使用而是从该Description领域。

我 100% 肯定这是我在查询结构上做错的事情,所以有什么提示吗?顺便说一句,如果有人可以提供建议的地方来了解有关使用 NEST 的 Elastic 的更多信息,那将非常有帮助。他们的文档有点缺乏,您必须了解如何使用 Elastic 才能使大部分内容有意义,而由于我不知道,所以我只能磕磕绊绊。

这是 的结构ElasticListing

    public long Id { get; set; }

    public string Brand { get; set; }

    public string Manufacturer { get; set; }

    public string ActiveTags { get; set; }

    public string Description { get; set; }

    public int Year { get; set; }

    public string Location { get; set; }
Run Code Online (Sandbox Code Playgroud)

我在 NEST 中使用的搜索结构是这样的, …

elasticsearch nest

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

在Internet Explorer中禁用打印

有没有办法在Internet Explorer中禁用打印而不在浏览器API周围编写shell?GPO将是最好的方法,但我当然可以做任何事情.

printing internet-explorer

0
推荐指数
1
解决办法
9066
查看次数

在服务器上反序列化WCF消息

我实现了一个自定义消息检查器(通过IDispatchMessageInspector)来拦截在WCF服务的服务器端接收的消息,因此我可以尝试反序列化消息并应用一些特定的业务逻辑.我遇到的问题是当我将MessageBuffer的内容写入新的MemoryStream然后尝试反序列化时,我收到一条错误,指出"根级别的数据无效.第1行,第1位".我知道传入的数据是有效的,因为跳过检查器可以使一切正常.

示例代码:

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
    {
        MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
        request = buffer.CreateMessage();
        string msg = buffer.CreateMessage().ToString();

        var dc = new DataContractSerializer(typeof(Adder));

        using (var stream = new MemoryStream())
        {
            buffer.WriteMessage(stream);

            stream.Position = 0;

            //deserializing error occurs here
            var c = dc.ReadObject(stream);
        }

        return null;
    }
Run Code Online (Sandbox Code Playgroud)

这是Adder类/接口:

    [DataContract(Name = "adder", Namespace = "http://test.com")]
public class Adder
{
    [DataMember(Name = "first")]
    public int First { get; set; }

    [DataMember(Name = "second")]
    public int Second { get; …
Run Code Online (Sandbox Code Playgroud)

c# wcf deserialization

0
推荐指数
1
解决办法
5176
查看次数

PayPal沙盒内部服务错误

我正在尝试使用PayPal Sandbox来测试自动信用卡处理,但遇到了问题.上周我的测试是"成功的",因为当发生验证错误时,API会窒息,但至少我知道发生了什么.清理我传递给API的代码后,我不再收到验证错误,只是内部服务错误,这已经发生了四天.

以下是日志文件显示的内容(此处删除了访问令牌,但它是在使用之前从API成功生成的):

2013-07-01 16:47:00,845 [32944] DEBUG PayPal.Manager.ConnectionManager [(null)] grant_type = client_credentials

2013-07-01 16:47:03,296 [32944] DEBUG PayPal.Manager.ConnectionManager [(null)]服务响应

2013-07-01 16:47:03296 [32944] DEBUG PayPal.Manager.ConnectionManager [(空)] { "范围":" https://api.paypal.com/v1/payments/*.https://开头api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.* openid","access_token":"[生成的访问令牌]", "token_type":"Bearer","app_id":"[app ID]","expires_in":28800}

2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] Content-Type:application/json

2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)]授权:持票人[访问代码]

2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] User-Agent:PayPalSDK/rest-sdk-dotnet 0.7.1; lang = DOTNET; v = 4.0.30319.18046; bit = 64 ; os = Windows 8 6.2.9200.0;

2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] PayPal-Request-Id:303be909-4268-4909-b1cb-b51b6dc7ea54

2013-07-01 16:47:05,365 [32944] DEBUG …

paypal paypal-sandbox

0
推荐指数
1
解决办法
2765
查看次数

将CryptoStream解密为MemoryStream

我已经编写了一个过程,在该过程中,将文件加密并上传到Azure,然后必须对下载过程进行解密,否则将失败,并显示“填充无效且无法删除”错误,或者“要解密的数据长度为无效。” 错误。

我已经尝试了许多在线解决方案,包括使用RijndaelManaged和CryptoStream解密C#mp3文件,但是它们似乎都不起作用,我最终只是在这两个错误之间来回跳动。加密过程使用的是解密使用的相同密钥/ IV对,并且由于它将解密一部分流,因此我感觉工作正常-最终会死于上述错误。

这是我的代码,有什么想法吗?请注意,三个变种(cryptoStream.CopyTo(decryptedStream)do {}while)不跑起来-他们在这里展示我已经尝试过的选项,所有这一切的失败。

byte[] encryptedBytes = null;

using (var encryptedStream = new MemoryStream())
{
    //download from Azure
    cloudBlockBlob.DownloadToStream(encryptedStream);

    //reset positioning for reading it back out
    encryptedStream.Position = 0;

    encryptedBytes = encryptedStream.ConvertToByteArray();
}

//used for the blob stream from Azure
using (var encryptedStream = new MemoryStream(encryptedBytes))
{
    //stream where decrypted contents will be stored
    using (var decryptedStream = new MemoryStream())
    {
        using (var aes = new RijndaelManaged { KeySize = …
Run Code Online (Sandbox Code Playgroud)

c# encryption aes cryptostream azure-storage-blobs

0
推荐指数
1
解决办法
8830
查看次数