首先,我不知道我在做什么。我是一个Java,我必须修复其他人编写的C#程序。
我们不得不更新web服务并将其移动到另一台机器上。更新包括了对https的更改。我必须修复的工具用于将文件上传到web服务,并与服务运行在同一台机器上。通信是通过SOAP (我认为)使用wsdl文件实现的。SSL-证书是自签名的,但存储在可信的证书存储中。
首先,我试图更改到新服务器的路径,但是上传工具抱怨到https的更改。不幸的是,我不再有例外了。
然后我重新导入了新的wsdl,现在我得到了:
没有发现机器上安装了System.IdentityModel.Selectors.CardSpaceException:服务的
版本。请安装CardSpace并重试操作。
服务器堆栈跟踪: at System.IdentityModel.Selectors.CardSpaceShim.GetCardSpaceImplementationDll() at System.IdentityModel.Selectors.CardSpaceShim.InitializeIfNecessary()
在System.IdentityModel.Selectors.CardSpaceSelector.GetToken(CardSpacePolicyElement[] policyChain,SecurityTokenSerializer tokenSerializer) at System.ServiceModel.Description.ClientCredentials.GetInfoCardSecurityToken(Boolean requiresInfoCard,CardSpacePolicyElement[] chain,SecurityTokenSerializer tokenSerializer) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object[] args,Object server,Object[]& outArgs)在System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg,IMessageSink replySink)
异常重新引发at : at System.Runtime.AsyncResult.EndTAsyncResult
在System.ServiceModel.Channels.ServiceChannel.DisplayInitializationUI() at System.ServiceModel.Channels.ServiceChannel.CallDisplayUIOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel通道,TimeSpan超时值)在System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan超时时,CallOnceManager级联)在System.ServiceModel.Channels.ServiceChannel.EnsureDisplayUI() at System.ServiceModel.Channels.ServiceChannel.Call(String动作,布尔单向操作,ProxyOperationRuntime操作,Object[] ins,Object[] outs,TimeSpan超时)在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,( System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息的ProxyOperationRuntime操作)
异常在1: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg( at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type)应CLIIkarosImport.ImportUploadService.IImportUploadService.UploadFile(FileUploadMessage请求)在C:\projekte_c#\CLIIkarosImport\CLIIkarosImport\Service References\ImportUploadService\Reference.cs:line 194 at CLIIkarosImport.ImportUploadService.ImportUploadServiceClient.UploadFile(Int64 FileSize,String OriginalFileName,String UserIpV4,String UserIpV6,String UserName,( C:\projekte_c#\CLIIkarosImport\CLIIkarosImport\Service References\ImportUploadService\Reference.cs:line 205 at CLIIkarosImport.Webservice.Import.ImportServiceModule.<>c__DisplayClass0_0.<.ctor>b__2(Object x)中的C:\projekte_c#\CLIIkarosImport\CLIIkarosImport\Webservice\Import\ImportServiceModule.cs:line 86中的FileStream、String& FileId、String& Message)
Get["/ImportFromPublicLocation/{path}"] = x =>
{
string newPath = x.path;
newPath = newPath.Replace("-*-", ".");
newPath = newPath.Replace("-#-", @"\");
var path = Uri.UnescapeDataString(newPath);
Console.WriteLine($"Given path is {path}");
if (!File.Exists(path))
{
Console.WriteLine("File doesn't exist!");
return new Response() {StatusCode = HttpStatusCode.NoContent};
}
var response = new CustomResponse();
using (var client = new ImportUploadServiceClient())
{
var fileName = Path.GetFileName(path);
var fStream = new FileStream(path, FileMode.Open);
string id, message;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
try
{
var fResponse = client.UploadFile(fStream.Length, fileName, "", "", "Import", fStream, out id, out message);
Console.WriteLine($"Response is {fResponse}");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
response.JobId = id;
response.Message = message;
}
return new JsonResponse<CustomResponse>(response, defaultJsonSerializer);
};我不知道对https的更改是问题所在,还是移动到新服务器。我不知道我的前任是否对这台旧机器做了任何改动以使它正常工作。
如果你需要更多的信息,请告诉我。
编辑:我认为这是应用程序本身的一个问题。如果webserver被关闭,并且在wireshark中找不到对api-server的任何调用,我也会得到同样的异常。
发布于 2021-09-22 08:34:12
最后,这是STS (AD、FS或FS)用户身份验证中的一个安全问题,我不得不使用服务提供者提供的DLL中的类来连接到服务。
https://stackoverflow.com/questions/69252843
复制相似问题