2015-02-13 3 views
1

У меня есть пользовательская служба WCF, которая использует WebRequest для обновления файла на моем сайте SharePoint. Но я получаю 401 Несанкционированную ошибку при попытке использовать службу после ее развертывания в BizTalk.Учетные данные WebRequest в службе BizTalk WCF

Я попытался установить учетные данные для объекта WebRequest, и он будет работать, если я буду жестко закодировать реальную учетную запись. Но это не то, что я могу оставить.

Кому-нибудь приходилось разрабатывать пользовательскую службу BizTalk, которая использует WebRequest для изменения SharePoint? Как вы относились к ведению учетных данных?

Местоположение Ошибка

public static void uploadSharePointFile(Uri fileUri, byte[] myByteArray, ref List<string> result) 
{ 
     Stream dataStream = null; 
     WebResponse response = null; 
     try 
     { 
      result.Add("Requesting PUT of SharePoint File\n " + fileUri.ToString()); 
      WebRequest request = WebRequest.Create(fileUri); 
      request.UseDefaultCredentials = true; 
      request.PreAuthenticate = true; 
      request.Credentials = CredentialCache.DefaultNetworkCredentials; 
      request.Method = "PUT"; 
      request.ContentType = "text/xml"; 
      request.ContentLength = myByteArray.Length; 
      result.Add("File Size: " + request.ContentLength + " Bytes"); 
      dataStream = request.GetRequestStream(); 
      dataStream.Write(myByteArray, 0, myByteArray.Length); 
      dataStream.Close(); 
      result.Add("Data stored to SharePoint File"); 

      response = request.GetResponse(); 
      result.Add("Response Status Description: " + ((HttpWebResponse)response).StatusDescription); 
      dataStream = response.GetResponseStream(); 
     } 
     catch (WebException e) 
     { 
      result.Add("(401) Unauthorized"); 
      result.Add(e.InnerException.Message); 
     } 
     finally 
     { 
      if (dataStream != null) dataStream.Close(); 
      if (response != null) response.Close(); 
     } 
} 

Web.Config

enter code here 
<configuration> 

    <configSections> 
    </configSections> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding maxBufferSize="65536000" maxReceivedMessageSize="65536000" maxBufferPoolSize="65536000"> 
      <readerQuotas maxBytesPerRead="65536000" maxArrayLength="65536000" maxDepth="65536000"/></binding> 
     </basicHttpBinding> 
     <basicHttpsBinding> 
     <binding maxBufferSize="65536000" maxReceivedMessageSize="65536000" maxBufferPoolSize="65536000"> 
      <readerQuotas maxBytesPerRead="65536000" maxArrayLength="65536000" maxDepth="65536000"/></binding> 
     </basicHttpsBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 

</configuration> 

`

+0

Я заметил, что вы добавляете 'result.Add (" (401) Unauthorized ");' в ваш блок catch. Я предполагаю, что вы получаете фактические ответы 401? –

+0

@Tom Redfern это правильно. Мне просто легче понять проблему во время тестирования на данный момент. –

ответ

1

Решение было установить разрешения SharePoint для списка/библиотеки я пытался изменить. Я был слишком зациклен на одном конце службы, что забыл рассмотреть другую.

И добавил <Authentication mode = "Windows"/> в web.config. Я не уверен, что на самом деле что-то сделал, но это не нарушает сервис.

Смежные вопросы