我有一个Silvleright业务应用程序,Silverlight_BussApp
。
它有Silverlight_BussApp
项目和Silverlight_BussApp.Web
项目。
我需要在按钮点击事件后面的代码中填充后打开记事本。 我无法使用浏览器应用程序。
因为Silverlight不允许我这样做,所以我在Silverlight_BussApp.Web
项目中创建了一个WCF服务
并通过Silverlight项目中的代理调用它。 这很好用。
WCF服务中的代码是:
public void openFileWithNotepad(string filename)
{
try
{
if (File.Exists(filename))
{
Process.Start("notepad.exe", filename);
}
else
{
MessageBox.Show(
"I was unable to locate the following file: " + filename,
"File Not Found");
}
}
catch (Exception e)
{
throw e;
}
}
现在我需要在多个Silverlight项目中使用此openFile
功能。
所以我创建了一个“WCF服务项目”并创建了一个WCF服务,在IIS上托管它,并在Silverlight项目中创建了一个代理。令我沮丧的是,该文件没有打开,它一直给我“找不到文件”错误。
有人可以帮我弄清楚如何使我的所有Silverlight项目成为可重用的功能吗?
为什么当我在IIS上托管的WCF服务中使用相同的代码时,当它在Silverlight项目的同一解决方案中托管时,它无法正常工作?
答案 0 :(得分:1)
对于初学者来说,Silverlight_BussApp.Web
项目中的代码将在服务器上执行,而Silverlight_BussApp
项目中的代码将被执行在客户端。在开发过程中,客户端和服务器表面上是同一台机器 - 当您在Visual Studio中单击“运行”时,开发Web服务器将在您的计算机上启动并托管您的.Web项目,而Silverlight应用程序在您的浏览器中运行。
部署应用程序时,客户端(即您的浏览器)很可能与服务器(即IIS)位于不同的物理机器上。因此,忽略IIS可能施加的任何其他安全限制(这可能是您收到“找不到文件”错误的原因),对Process.Start
的调用将启动记事本与您正在使用的机器完全不同的机器。
尝试使用SaveFileDialog
将您想要的任何内容保存到客户端的计算机上,然后告诉他们打开生成的文件。