【发布时间】:2012-05-04 13:13:52
【问题描述】:
所以我有一个控制台应用程序,它等待客户端按 Enter 键,然后将文件从硬编码位置复制到另一个位置。作为一个控制台应用程序,这很好用,但是当我将它转换为 Windows 服务时,当客户端按 Enter 键时,我收到以下错误代码:
"Could not connect to http://localhost:8080/myService. TCP error code 10061:
No connection could be made because the target machine actively refused it 127.0.0.1:8080."
我已检查以确保端口已打开并且防火墙没有阻止它。一切似乎都很清楚,所以我对发生的事情感到困惑。下面我将发布我的客户端和主机代码,请查看它,如果我遗漏了什么,请告诉我,以便我继续前进。
这是主人
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;
using System.ServiceModel;
using myServiceLib;
namespace myServiceHost
{
class Program : ServiceBase
{
static void Main(string[] args)
{
ServiceBase.Run(new Program());
}
public Program()
{
this.ServiceName = "myService";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
using (ServiceHost serviceHost = new ServiceHost(typeof(myService)))
{
serviceHost.Open();
}
}
}
}
这是客户
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace myServiceClient
{
class Program
{
static void Main(string[] args)
Console.WriteLine("***** Prepairing to transfer files ***** \n");
using (FileXferClient myMethod = new FileXferClient())
{
Console.WriteLine("Press any key to begin transfer...");
Console.ReadLine();
string fileName = "test.txt";
string sourcePath = @"C:\TestFromC";
string targetPath = @"C:\TestFromC\Test Folder";
myMethod.FileXfer(fileName, sourcePath, targetPath);
Console.WriteLine("File transfer is complete!");
}
Console.ReadLine();
}
}
}
myServiceLib (this at library with the logic)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace myServiceLib
{
public class myService : IFileXfer
{
public myService()
{
Console.WriteLine("Awaiting Files...");
}
public void FileXfer(string fileName, string sourcePath, string targetPath)
{
string passFileName = fileName;
string passSourcePath = sourcePath;
string passTargetPath = targetPath;
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
System.IO.File.Copy(sourcePath, destFile, true);
if (System.IO.Directory.Exists(sourcePath))
{
string[] files = System.IO.Directory.GetFiles(sourcePath);
foreach (string s in files)
{
fileName = System.IO.Path.GetFileName(s);
destFile = System.IO.Path.Combine(targetPath, fileName);
System.IO.File.Copy(s, destFile, true);
}
}
else
{
Console.WriteLine("Source path does not exist!");
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace myServiceLib
{
[ServiceContract(Namespace = "http://Intertech.com")]
public interface IFileXfer
{
//Transfer files from one the target machine to the destination location
[OperationContract]
void FileXfer(string fileName, string sourcePath, string targetPath);
}
}
【问题讨论】:
-
"
FileXfer": 音节节省?不。只是毫无意义。 -
您确定服务器在客户端启动之前正在运行吗?
-
是的,服务器确实在运行。我会打开 services.msc 并确保该进程在那里并在启动客户端之前运行。
-
@Jimmy 不知道您的代码是如何设计的,但事实是客户端(或负责连接的部分)在服务器启动之前运行。
-
我不确定我是否已完全解释清楚,对于造成的混淆,我深表歉意。 “主机”是负责连接并等待接收消息以开始文件传输的“服务器”。 “客户端”是发送该调用的应用程序。看上面我相信混乱是因为我忘记包含 myServiceLib ,它包含我将使用该代码更新帖子的大量逻辑。
标签: c# .net wcf windows-services console-application