Web Service中连续调用dll的问题!
tswtq 2005-08-16 05:19:29 在我的Web Service中由于需要对视频进行控制,所有采用了DirectShow技术。
我通过一个dll的项目,完成对DirectShow的操作的封装,准备使用platform invoke让Web Service来驱动这个dll文件。
经过测试,在一个普通的.net应用程序中,我已经成功地通过.Net应用程序对该dll进行了调用,实现了一个启动,一个停止两步操作,反复测试没有发现异常。
但是当我把这部分移到Web Service上时,出现了奇怪的问题。
Web Service可以和先前的.net应用程序一样正常的调用dll文件,实现“启动”视频的动作,但是当我再次通过Web Service试图关闭视频的时候,Service就会出错,报告Server Application Unavailable,随后视频也停止了,查看事件只看到了
来源:ASP.NET 1.1.4322.
类别:无
类型:错误
事件ID:1000
描述:aspnet_wp.exe (PID: 3872) stopped unexpectedly.
目前没有发现更多的细节,部分代码如下
Web Service的声明:
public bool BeginCapture(string serverIP, int streamPort)
{
CreateVideoLine();
StartVideo(serverIP, streamPort);
return true;
}
public bool EndCapture()
{
StopVideo();
ReleaseVideoLine();
return true;
}
[DllImport("CaptureV.dll")]
private static extern int CreateVideoLine();
[DllImport("CaptureV.dll")]
private static extern int ReleaseVideoLine();
[DllImport("CaptureV.dll")]
private static extern int StartVideo(string ipAddress, int port);
[DllImport("CaptureV.dll")]
private static extern int StopVideo();
Dll部分的代码:
其中pRTPSender 和 pGraph在dll中定义为全局变量,不知道会不会有影响。
去掉了错误处理的代码。
BOOL StartVideo(const char* pIPAddress, int usPort)
{
INetworkConfig * pNetConfig;
hr = pRTPSender->QueryInterface(IID_INetworkConfig, (void**)&pNetConfig);
pNetConfig->AddDestAddress(inet_addr(pIPAddress), htons(usPort));
pNetConfig->Release();
IMediaControl *pControl;
hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
hr = pControl->Run();
pControl->Release();
return TRUE;
}
BOOL StopVideo(void)
{
if (pGraph == NULL)
{
return FALSE;
}
IMediaControl *pControl;
hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
OAFilterState state;
pControl->GetState(INFINITE, &state);
if (state == State_Running)
pControl->Stop();
pControl->Release();
pControl = NULL;
return TRUE;
}
希望大家能帮忙找找问题可能在什么地方。