2015-09-24 1 views
0

Я использую службу STSSTST13 для получения токена. Я создал клиент для службы WCF с помощью механизма addreference в моем консольном приложении. в то время как запрос WCF получил запрос WCF, но он говорит, что «ID3007: элемент« TokenType »с пространством имен« непризнан ». заголовки извлечены правильно, но при обработке тела сообщения он показывает эту ошибку.WsTrust.Trust13Issue - настройка RequestSecurityTokenType -ID3007: Элемент 'TokenType' с пространством имен '' не распознается

вот код C#, который вызывает службу WCF.

WSTrust13SyncClient proxy = новый WSTrust13SyncClient();

 RequestSecurityTokenType request = new RequestSecurityTokenType(); 
     proxy.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "XXXX"); 

     var epa = new EndpointAddress(new Uri("https://XXX.svc/WSTrust13"), 
      new[] { AddressHeader.CreateAddressHeader("Id", string.Empty,000001) 
      }); 
     proxy.Endpoint.Address = epa; 
     XmlElement TokenTypeelement = null; 
     XmlDocument doc = new XmlDocument(); 
     TokenTypeelement = doc.CreateElement("TokenType"); 
     TokenTypeelement.InnerText = "urn:oasis:names:tc:SAML:2.0:assertion"; 
     List<XmlElement> lstElements = new List<XmlElement>(); 
     lstElements.Add(TokenTypeelement); 

     request.Items =lstElements.ToArray(); 
     try 
     { 
      RequestSecurityTokenResponseCollectionType response = proxy.Trust13Issue(request); 
     } 
     catch (Exception ex) 
     { 

     } 

На самом деле, когда я называю это WCF с помощью SoapUI он работает отлично и следующее тело запроса SoapUI.

Я пытаюсь имитировать то же самое в коде C#, чтобы добавить их в запрос, но не смог и получил ошибку выше.

enter code here 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34209")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512")] 
public partial class RequestSecurityTokenType : object, System.ComponentModel.INotifyPropertyChanged { 

    private System.Xml.XmlElement[] itemsField; 

    private string contextField; 

    private System.Xml.XmlAttribute[] anyAttrField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] 
    public System.Xml.XmlElement[] Items { 
     get { 
      return this.itemsField; 
     } 
     set { 
      this.itemsField = value; 
      this.RaisePropertyChanged("Items"); 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")] 
    public string Context { 
     get { 
      return this.contextField; 
     } 
     set { 
      this.contextField = value; 
      this.RaisePropertyChanged("Context"); 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAnyAttributeAttribute()] 
    public System.Xml.XmlAttribute[] AnyAttr { 
     get { 
      return this.anyAttrField; 
     } 
     set { 
      this.anyAttrField = value; 
      this.RaisePropertyChanged("AnyAttr"); 
     } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

это объект класса, подверженный методу Issue.

ответ

0

вычислил его, мне нужно добавить пространство имен и при создании XMLElement. это то, что удаляет проблему.