C# BizTalk WCF服务中的WebRequest凭据
我有一个自定义WCF服务,它使用WebRequest更新SharePoint网站上的文件。但是,在将服务部署到BizTalk之后,尝试使用该服务时,我遇到了一个401未经授权的错误 我已经尝试过为WebRequest对象设置凭据,如果我硬编码一个实际的帐户,它就会起作用。但这不是我可以留下的东西 是否有人必须开发使用WebRequest修改SharePoint的自定义BizTalk服务?你是如何处理这些凭证的 错误位置C# BizTalk WCF服务中的WebRequest凭据,c#,wcf,sharepoint,biztalk,C#,Wcf,Sharepoint,Biztalk,我有一个自定义WCF服务,它使用WebRequest更新SharePoint网站上的文件。但是,在将服务部署到BizTalk之后,尝试使用该服务时,我遇到了一个401未经授权的错误 我已经尝试过为WebRequest对象设置凭据,如果我硬编码一个实际的帐户,它就会起作用。但这不是我可以留下的东西 是否有人必须开发使用WebRequest修改SharePoint的自定义BizTalk服务?你是如何处理这些凭证的 错误位置 public static void uploadSharePointFi
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();
}
}
public static void uploadSharePointFile(Uri文件Uri,字节[]myByteArray,参考列表结果)
{
流数据流=null;
WebResponse=null;
尝试
{
result.Add(“请求放置SharePoint文件\n”+fileUri.ToString());
WebRequest=WebRequest.Create(fileUri);
request.UseDefaultCredentials=true;
request.PreAuthenticate=true;
request.Credentials=CredentialCache.DefaultNetworkCredentials;
request.Method=“PUT”;
request.ContentType=“text/xml”;
request.ContentLength=myByteArray.Length;
添加(“文件大小:“+request.ContentLength+”字节”);
dataStream=request.GetRequestStream();
写入(myByteArray,0,myByteArray.Length);
dataStream.Close();
添加(“存储到SharePoint文件的数据”);
response=request.GetResponse();
添加(“响应状态描述:”+((HttpWebResponse)Response.StatusDescription);
dataStream=response.GetResponseStream();
}
捕获(WebE例外)
{
结果。添加(“(401)未经授权”);
result.Add(e.InnerException.Message);
}
最后
{
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>
在此处输入代码
`解决方案是为我试图修改的列表/库设置SharePoint权限。我太专注于服务的一端,所以我忘了考虑另一个。
我在web.config中添加了
。我不确定这是否真的起了作用,但它并没有破坏服务。我注意到您正在添加result.Add(“(401)Unauthorized”)代码>在您的catch块中。“我想你得到的是实际的401反应?”汤姆·雷德芬说得对。它只是让我更容易在测试过程中识别问题。