我正在尝试向可以在本地运行的用户提供WPF应用程序。
我目前有一个WebAPI项目,用作正常修改数据库中数据的API。这完全按预期工作。
我有一个类库,我已经编写了一些内部类,这些类是运行我将提供给用户的WPF项目所必需的 - 引用了这个类包。
我想创建这个类库,以便给出它们的WPF项目具有最小的可编辑代码,它们可能会改变并破坏应用程序。这一切都很好并且设置好了。
我创建的WPF项目为用户提供了一个用户界面,用于查看和修改本地数据库中的数据(随项目提供)。向用户提供此项目的目的是,他们可以在项目中修改或创建可用于扩展我们的解决方案的新类。
我有本地数据库,WPF项目和类库都已设置并按预期工作,但是,我想包含WebAPI项目,以便当它们在本地运行WPF应用程序时,也会运行WebAPI的实例本地在后台 - 在.NET本地Web服务器上,就好像我在WebAPI项目中运行了一样。
这个问题 ,我宁愿不只是给他们整个WebAPI项目来在WPF解决方案中加载和运行自己,并且想要一个实例当WPF应用程序开始时,WebAPI才开始,以便它们可以通过WPF接口操作数据库数据,或者通过从其他源向本地运行的API发送请求。
当WPF应用程序启动而不在WPF解决方案中包含WebAPI项目时,是否可以启动WebAPI的实例(就像我在WebAPI项目中按F5一样)?
我想在WPF项目中简单地包含WebApi的DLL,并在WPF应用程序启动时在本地.NET Web服务器中启动它的实例。这可能吗?您可以从另一个引用或包含所述DLL的独立项目中将构建的DLL启动到本地Web服务器吗?
我已经研究过Cassini和其他一些选项,例如将其转换为EXE,但我认为它们比我需要的要复杂得多,如果有更简单的方法,我不想开始改造代码我还没有在网上偶然发现。
答案 0 :(得分:1)
您可以向他们提供已发布的WebAPI文件,并让他们在本地IIS中设置实例,然后让WPF项目引用该本地实例。但是,只有当用户量相对较低时,这才可行。
答案 1 :(得分:0)
对于其他想知道如何操作的人,使用editas的想法,我将已发布的文件放入一个文件夹中,该文件夹将包含在提供给用户的包中,并在WPF应用程序启动时调用引用的类库使用我写的方法初始化API:InitialiseAPI()
。
此方法通过调用EXE来工作,该EXE在将“已发布”文件附加到实例的用户计算机上静默启动IIS Express实例。这个工作完美,我还创建了应用程序退出方法来在退出时销毁IIS实例,因此当他们重新启动应用程序时,它不会抛出一个正在使用的端口异常。