小编Nul*_*ull的帖子

使用.NET中的WS安全性调用Web服务

我需要使用ASP.NET中的WS-Security保护的Web服务.

我正在使用SoapUI测试服务,作为信封请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://aduana.gov.py/webservices">
   <soapenv:Header/>
   <soapenv:Body>
      <web:agregarGuia>
         <!--Optional:-->
         <guia>?</guia>
         <!--Optional:-->
         <autenticacion>
            <!--Optional:-->
            <codAduana>?</codAduana>
            <!--Optional:-->
            <firmaWSAA>?</firmaWSAA>
            <!--Optional:-->
            <idUsuario>?</idUsuario>
            <!--Optional:-->
            <ticketWSAA>?</ticketWSAA>
         </autenticacion>
      </web:agregarGuia>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我得到的回应是:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>org.jboss.ws.core.CommonSOAPFaultException: This service requires &lt;wsse:Security>, which is missing.</faultstring>
      </env:Fault>
   </env:Body>
</env:Envelope>
Run Code Online (Sandbox Code Playgroud)

所以我联系了服务提供商,他们告诉我,必须使用WS-Security来调用服务.因此,发送到服务器的SOAP消息必须使用我的证书进行数字签名.

问题是我不知道该怎么做.到目前为止,我添加了一个服务参考,我在代码中传递了提到的证书:

var srvRef = new DnaSoapClient(); 
srvRef.ClientCredentials.ClientCertificate.Certificate = theCert;
var response = srvRef.agregarManifiesto( dnaManifiesto );
Run Code Online (Sandbox Code Playgroud)

我google了一些,有些人推荐WCF.我正在构建一个ASP.NET 4.5应用程序.这个场景有什么选择?我需要知道如何使用我的证书签署邮件.

编辑1: 我能够推进这个问题,现在我可以发送带有证书签名的SOAP消息,我即将完成任务.现在我无法在安全标签中设置正确的元素,我编辑了问题以显示信封,正确的信封和我的信封.

正确:这是正确请求的样本信封

<soapenv:Header>
  <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-B259DAB3D28E48CB6A140000796019094">MIIC9TCCAd2gAwIBAgIIUiM4nWs8kfcwDQYJKoZIhvcNAQEFBQAwNzERMA8GA1UEAwwIQWRtaW5DQTExFTATBgNVBAoMDEVKQkNBIFNhbXBsZTELMAkGA1UEBhMCU0UwHhcNMTQwMzIwMTkxMTIwWhcNMTgxMjIwMTQzNzEzWjBBMRQwEgYDVQQDDAtjb3VyaWVyLnRudDEOMAwGA1UECwwFc29maWExDDAKBgNVBAoMA2RuYTELMAkGA1UEBhMCcHkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOS71x5+ChwGzWs4VlLgkePbU8/zFHUrrE8nFNVsukMCc5q5hCK8/CeNM+mxImilLdJrGoC2/000lQetB9B3AqIrAdOfBFU4/qsAlgWI+kt2jnUsJMLRjQfxhAKMeX4RUb0CmTcsnXtWlFvYFFjiUi9nUJVSxCsmldVFgLIAHRPjAgMBAAGjfzB9MB0GA1UdDgQWBBTCwBBmU7f/4SmNz7GNJ25ILkPuhjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFDF+1hOSdgg2DFOUofnnXdx9TxjeMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAALVVGGNsTSMcfDBwkkNQH3MpfiNTo/mhH8ahqUVN1+5BIwWstv8fH0Sl9ea1XShKLPDfDIx8WSzUUIt/93f74B3a3oMpBtbVEiku2BKUp5cJfkYe2c5zPOxk3nzmQwcEoB++RgX9DJOtUkKA/It2IM9/8ggUyjceJQCpBRiA9Kg7+h3HfmOKNn+9/pNu498JXhSRKa8Jr4pp/1udYRk+W8sKGEBtAU9MvL3y0AbvLhUD+MZyvpHGB17fslC8Nnd5EBQH8hQD+DWGepyCBIlb0NA13YEoLMcRKDcWvSPd0UGWo2G0IOeUZaGuzzIz2n04QrXvnqQKAOFd9yH2VfGtWE=</wsse:BinarySecurityToken>
    <ds:Signature Id="SIG-96" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
          <ec:InclusiveNamespaces PrefixList="soapenv …
Run Code Online (Sandbox Code Playgroud)

c# wcf ws-security soap web-services

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

指针上的下标运算符

如果我有一个指向具有重载下标operator([])的对象的指针,为什么我不能这样做:

 MyClass *a = new MyClass();
 a[1];
Run Code Online (Sandbox Code Playgroud)

但必须这样做:

 MyClass *a = new MyClass();
 (*a)[1];
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading

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

当您使用多重继承时,静态转换是否安全?

我发现自己处于一种我知道什么类型的东西的情况.Type是三个(或更多)继承级别之一.我调用返回的工厂B*但是T是一个类型的最高级别(如果我的代码知道它是什么)或第二级别.

无论如何,我static_cast在模板中做了一个错误的事情.我的问题是我什么时候可以安全地静态施放?有没有这样的时间?我在这种情况下做到了,因为当我意外地将T作为古怪的东西(已经发生并且)动态转换忽略(并返回null)时,我宁愿得到编译错误.但是,当我知道正确的类型时,指针未被调整,导致我有一个错误的指针.我不确定为什么在这种情况下允许静态转换.

我什么时候可以安全地使用static_cast进行向下铸造?有没有情况?现在似乎总是错误地使用a static_cast(当目的是向下投射时)

好的,我想出了如何重现它.

#include <iostream>
struct B { virtual void f1(){} };
struct D1 : B {int a;};
struct D2 : B {int a, b; };
struct DD : D1, D2 {};

int main(){
void* cptr = new DD(); //i pass it through a C interface :(
B*  a = (B*)cptr;
D2* b = static_cast<D2*>(a); //incorrect ptr
D2* c = dynamic_cast<D2*>(a); //correct ptr
std::cout << a << " " <<b << " " …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast static-cast

12
推荐指数
2
解决办法
7591
查看次数

将十六进制字符串转换为二进制

我想将十六进制字符串转换为二进制字符串.例如,Hex 2是0010.下面是代码:

String HexToBinary(String Hex)
{
    int i = Integer.parseInt(Hex);
    String Bin = Integer.toBinaryString(i);
    return Bin;
}
Run Code Online (Sandbox Code Playgroud)

但是这只适用于Hex 0 - 9; 它不适用于Hex A - F,因为它使用int.谁能增强它?

java string

12
推荐指数
5
解决办法
5万
查看次数

仅将getter方法共享给客户端的最佳方法是什么?

我正在用这样的类编写一个API:

public class NKMPMission {
    private String name;
    private int age;
    public NKMPMission(String name, int age)
    {
         this.name  = name;
         this.age   = age;
    }
    public String getName() 
    {
       return name;
    }

    public int getAge() 
    {
       return age;
     }
   }
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 如何确保此类的用户NKMPMission只访问getter?
  2. 如何为这个功能引入setter,以便我作为开发人员可以设置,但用户无法设置?

java

12
推荐指数
3
解决办法
1080
查看次数

这里的递归如何工作?

代码1:

public static int fibonacci (int n){ 
    if (n == 0 || n == 1) { 
        return 1; 
    } else { 
        return fibonacci (n-1) + fibonacci (n-2); 
    }        
} 
Run Code Online (Sandbox Code Playgroud)

fibonacci如果你还没有完成解释它是什么,你怎么用?我已经能够理解在其他情况下使用递归,如下所示:

代码2:

class two 
{
    public static void two (int n) 
    {
        if (n>0) 
        {
            System.out.println (n) ;
            two (n-1) ;
        }
        else
        {
            return ;
        }
    } 

    public static void main (String[] arg) 
    {
        two (12) ;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在代码2的情况下,n最终将达到它不满足的点,n>0并且该方法将停止递归调用自身.但是,在代码2的情况下,我不知道它是如何从1 n=1开始的,如果是起点2和3和5,依此类推.此外,我不知道该线如何return fibonacci (n-1) …

java recursion fibonacci

11
推荐指数
1
解决办法
1918
查看次数

任何自动生成doxygen注释块的软件?

我正在开发一个大型的C++程序,现在我决定用Doxygen来记录它.有很多类,方法,函数,宏等.因此,我正在搜索将扫描我的源代码树并在每个"可记录项目"上插入Doxygen注释块的软件,以便我稍后编辑它们并添加方法描述等详细信息.

有这样的软件吗?

我使用Code :: Blocks IDE在GNU/Linux下,因此不需要Visual Studio插件.

c++ doxygen

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

非复制istringstream

因此istringstream,在初始化时复制字符串的内容,例如

string moo("one two three four");
istringstream iss(moo.c_str());
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法std::istringstream使用给定c_str的缓冲区而不复制东西.这样,在传递std::istringstream&istream&作为参数的函数之前,它不必复制大量内存.

我一直在努力做的是转换一些只接受std::ifstream&参数的函数(它们主要是解析器)istream&.我是否必须为此创建自己的istream子类?

c++ istream istringstream

11
推荐指数
2
解决办法
2869
查看次数

代码块,MinGW,Boost和静态链接问题

我正在使用MinGW的代码块,我正在尝试使用静态链接编译一个简单的程序.我已经使用这些方向构建了Boost库.一切都很好,我能够成功编译这个简单的程序(它编译,我知道它不起作用,因为它在消息发送到控制台之前退出,但我只是想让它编译).

如果我的链接器库中有一个DLL,它编译得很好,但当我用相同内容的静态.a库切换它时,我得到未定义的引用,例如"未定义引用`_imp ___ ZN5boost6threadD1Ev'|".

我不知道问题是什么,也无法找到解决方案.我认为这可能与链接器设置有关,但我找不到有关如何更改它们的信息.我将非常感谢可以提供的任何帮助.

#include <iostream>
#include <boost/thread.hpp>

void myfunction()
{
    std::cout << "this is a thread" << std::endl;
    return;
}

int main()
{
    boost::thread mythread(&myfunction);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c++ static boost mingw codeblocks

11
推荐指数
1
解决办法
5189
查看次数

什么时候在C++中使用*,&或const?

我正在研究指针参考,并遇到了不同的方式来提供参数.有人可以解释每个人的实际含义吗?

我认为第一个很简单,x就是输入参数的副本,因此在堆栈上创建了另一个变量.至于其他人,我很无能为力.

void doSomething1(int x){
    //code
}
void doSomething2(int *x){
    //code
}

void doSomething3(int &x){
    //code
}
void doSomething3(int const &x){
    //code
}
Run Code Online (Sandbox Code Playgroud)

当声明变量时,我也会看到这样的东西.我不明白他们之间的差异.我知道第一个将放入堆栈中100的变量y.它不会创建新地址或任何东西.

//example 1
int y = 100;

//example 2
int *y = 100;

//Example 3: epic confusion!
int *y = &z;
Run Code Online (Sandbox Code Playgroud)

问题1:我如何使用这些方法?什么时候最合适?

问题2:何时以这种方式声明变量?

例子很棒.

PS这是我没学习C++的主要原因之一,因为Java只有垃圾收集.但现在我必须进入C++.

c++ pointers reference

11
推荐指数
2
解决办法
1210
查看次数